2009-06-28 4 views

Antwort

60

nicht sicher, warum die Definition der Funktion mit im Rahmen von ready() ist wichtig für Sie, aber Sie können es, indem er erklärt foo vorne funktioniert:

<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> 

Natürlich kann man nicht foo() aus dem Inline-Aufruf Skript sofort nach ready(), weil der ready() Code noch nicht ausgeführt wurde, aber Sie können die Funktion später aufrufen.

So stellen Sie sicher, dass nichts versuchen foo() bevor der ready() Code aufzurufen ausgeführt wurde (oder die Erstmeldung von foo() eine harmlose Funktion zu machen).

+0

Tolle Idee. Danke Richie! –

+0

Was ist, wenn Sie 'foo()' mit einigen Parametern aufrufen müssen?Wie würden Sie an ihnen vorbeikommen und wie würden sie empfangen werden? –

+1

@ alonso.torres: Genau wie jede andere JavaScript Funktion: 'foo = Funktion (x, y, z) {...}' ... 'onclick =" foo (1, 2, 3) "' – RichieHindle

24

Sie können, aber sie müssen im Rahmen der ready()-Methode aufgerufen werden, sonst verlieren sie Umfang, wenn die ready()-Methode beendet.

Zum Beispiel wird der folgende Code funktioniert:

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

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

Gibt es eine Möglichkeit, dies zu umgehen? Ändern Sie den Umfang? –

+8

Einfach. Definieren Sie sie außerhalb des Bereichs .ready (...). Ich verstehe nicht, warum Sie so daran interessiert sind. Welchen Nutzen könnte es dir bieten? – Oli

+0

@Oli, wäre es aus Sicht einer Codeorganisation besser gewesen, es innerhalb des Bereichs .ready() deklarieren zu können. –

4

Ihre Funktion im Rahmen des $(document).ready() Rückruf definiert ist und nicht außerhalb vom gesehen werden. Entweder definieren Sie die Funktion außerhalb des $(document).ready() Geltungsbereiches nur von innen.

5

Sie werden als undefiniert angezeigt, wenn Sie sie in einen Bereich legen, der ihnen nicht gehört. Wenn Sie sie wirklich außerhalb des Bereichs von $ (document) .ready (...) verwenden möchten, müssen Sie sie extern deklarieren. Wie zum Beispiel:

var foo; 

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

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

Hoffe das hilft.

+0

Warum funktioniert die Hari Om-Lösung? –

+0

@jj_ Hari Om 's Lösung funktioniert, weil der Aufruf von myfnc innerhalb des gleichen Bereichs ist, in dem myfnc deklariert ist. – Nishan

+0

ja 'myfnc()' Aufruf ist, aber was ist mit 'myfnc (param1, param2)' in der Eingabe onclick Ereignis? –

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

Nur ein weiterer Zusatz:

Wenn Funktionen oder Variablen innerhalb der $(document).ready() Funktion erklärt, diese nicht zugänglich sind, wenn onclick() bindet im Dokument verwendet wird.

Sie können Ihre Deklarationen entweder außerhalb von $(document).ready() verschieben oder Sie können $('#element').on('click', function() {}) in `$ (document) .ready() verwenden.

Verwandte Themen