2013-07-10 16 views
15

Im meinen Web-App zu debuggen versuchen, die jQuery.

In Firebug im Aufruf von Funktionen innerhalb der $ (document) .ready ..

function val() { console.log('validated outside doc.ready'); } 
$(document).ready(function() 
{ 

    console.log('document ready...'); 

    function validate() { console.log('validated!'); } 
} 
verwendet

In Firebug-Konsole ich Typ und es sagt, es ist keine Funktion

Wenn ich val() eingeben, funktioniert es gut.

Wie rufe ich validate von der Konsole?

+2

Warum legen Sie nicht Ihre Validierungsfunktion außerhalb der document.ready -Funktion .. das Problem ist Ihre Funktion ist außerhalb des Geltungsbereichs, wenn es heißt .. – bipen

+0

es ist, weil 'validate' eine Closure-Funktion innerhalb der anonymus-Funktion ist, die an 'ready' als Callback übergeben wird. –

Antwort

45

Sie rufen eine Funktion wie diese nicht auf, nur definieren Sie die Funktion.

Der richtige Ansatz ist die Funktion außerhalb document.ready zu definieren, und es innen zu nennen:

// We define the function 
function validate(){ 
    console.log('validated!'); 
} 

$(document).ready(function(){ 
    // we call the function 
    validate(); 
}); 

Eine weitere Möglichkeit ist selbst aufrufen die Funktion wie folgt aus:

$(document).ready(function(){ 
    // we define and invoke a function 
    (function(){ 
    console.log('validated!'); 
    })(); 
}); 
+0

Ja, ich mag diesen Weg, sehr sauber und vielen Dank. Ich benutze jQuery nur ernsthaft für die letzten paar Monate, also lerne ich haufen cheers :) – IEnumerable

6

Ihre validate Funktion ist lokal für die Funktion, die Sie an den Handler jQuery ready übergeben haben.

wenn Sie das tun:

window.validate = function(){ /*....*/ }; 

können Sie von der Konsole zuzugreifen. Aber es ist nicht gut, den globalen Geltungsbereich zu verschmutzen, es sei denn, es dient nur dem Debuggen.

1

Nun, gibt es irgendeinen Grund, warum Sie diese Funktion innerhalb des Dokuments benötigen würden? nur innerhalb dieser Klammern (Scope) wird die Funktion existieren. Verschieben Sie es einfach aus, oder alles nur in document.ready

Verwandte Themen