2013-07-10 10 views
15

Im cercando di eseguire il debug il mio web app che utilizza jQuery.

In funzioni di chiamata Firebug im all'interno del $ (document) .ready ..

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

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

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

Nella console firebug digitare validate() e non è una funzione

Se si digita val(), funziona correttamente.

Come si chiama convalida dalla console?

+2

perché non si mette la funzione di validazione al di fuori della funzione document.ready .. il problema è che la funzione è fuori portata quando viene chiamata .. – bipen

+0

è perché 'validate' è una funzione di chiusura all'interno della funzione anonymus passata a' ready' come callback –

risposta

45

Non si sta chiamando una funzione del genere, è sufficiente specificare la funzione .

L'approccio corretto è quello di definire la funzione di fuori document.ready e chiamare dentro:

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

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

Un'altra opzione è quella di sé richiamare la funzione così:

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

Sì, mi piace in questo modo, molto pulito e grazie mille. Sto solo usando jQuery seriamente negli ultimi mesi, quindi sto imparando ad ammazzare :) – IEnumerable

6

La vostra funzione validate è locale alla funzione che hai passato al gestore jQuery ready.

se lo fai:

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

si sarà in grado di accedere dalla console. Ma non è una buona pratica inquinare lo scope globale a meno che non sia solo per il debug.

1

beh, c'è qualche ragione per cui avresti bisogno di quella funzione all'interno del documento? solo all'interno di queste parentesi (scope) la funzione esisterà. basta spostarlo, o tutto solo all'interno del documento.ready