2009-06-28 10 views

risposta

60

Non certo perché la definizione della funzione con del perimetro di ready() è importante per voi, ma è possibile farlo funzionare dichiarando foo in attacco:

<html><head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js"></script> 
<script> 
var foo;       // Here's the difference 
$(document).ready(function(){ 
    foo = function() 
    { 
    alert('Bar'); 
    } 
}); 
</script></head><body> 
<input type="button" onclick="foo()" value="Click me"> 
</body></html> 

Ovviamente non è possibile chiamare foo() dalla linea script immediatamente dopo ready() perché il codice ready() non è ancora stato eseguito, ma è possibile chiamare la funzione in un secondo momento.

basta assicurarsi che nulla può provare a chiamare foo() prima del codice ready() ha eseguito (o fare la dichiarazione iniziale di una funzione foo() innocuo).

+0

Ottima idea. Grazie, grazie! –

+0

E se fosse necessario chiamare 'pippo()' con alcuni parametri?Come li passeresti e come li riceveresti? –

+1

@ alonso.torres: Proprio come qualsiasi altra funzione JavaScript: 'foo = function (x, y, z) {...}' ... 'onclick = "foo (1, 2, 3)" ' – RichieHindle

24

È possibile, ma deve essere convocata entro il campo di applicazione del metodo di ready() altrimenti perdono portata quando il ready() metodo uscite.

Ad esempio, il codice seguente funziona:

$(document).ready(function(){ 
    function foo() 
    { 
    alert('Bar'); 
    } 

    foo(); // still in the scope of the ready method 
}); 
+1

C'è un modo per aggirare questo? Cambiare l'ambito? –

+8

Semplice. Definirli al di fuori dell'ambito .ready (...). Non vedo perché sei così attaccato a farlo. Quale beneficio potrebbe offrirti? – Oli

+0

@Oli, sarebbe stato meglio da un punto di vista dell'organizzazione del codice essere in grado di dichiararlo all'interno dell'ambito .ready(). –

4

La funzione viene definita nell'ambito della $(document).ready() richiamata e non possono essere visto dal dall'esterno. Definisci la funzione al di fuori dello scope $(document).ready() chiamandola solo dall'interno.

5

Arriveranno come non definiti se li mettete in uno spazio che non è loro. Se vuoi davvero usarli al di fuori dell'ambito di $ (document) .ready (...) allora devi dichiararli esternamente. Ad esempio:

var foo; 

$(document).ready(function(){ 
    foo = function() 
    { 
    alert('Bar'); 
    } 
}); 

foo(); // works now because it is in scope 

Spero che questo aiuti.

+0

Perché allora la soluzione Hari Om funziona? –

+0

@jj_ La soluzione di Hari Om funziona perché la chiamata a myfnc è all'interno dello stesso ambito in cui myfnc è dichiarato. – Nishan

+0

sì, la chiamata 'myfnc()' è, ma che dire 'myfnc (param1, param2)' nell'input evento onclick? –

1
<script> 
    $(document).ready(function(){ 
     myfnc = function (param1, param2) 
     { 
     alert('Hello'); 
     } 
     myfnc(); 
    }); 
</script> 
<input type="button" onclick="myfnc('arg1', 'arg2')" value="Click me"> 
0

Solo un altro Inoltre:

Quando dichiarate funzioni o variabili all'interno della funzione $(document).ready(), questi sono inaccessibili quando si utilizza onclick() lega nel documento.

È possibile spostare le dichiarazioni all'esterno di $(document).ready() oppure è possibile utilizzare $('#element').on('click', function() {}) all'interno di `$ (document) .ready().

Problemi correlati