2010-03-04 15 views
26

Come ti chiami la funzione lol() da fuori .ready $ (document)(), ad esempio:

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

provato:

$(document).ready(function(){ 
    lol(); 
}); 

E semplicemente:

lol(); 

Si deve essere convocata entro un javascript esterno come:

function dostuff(url){ 
    lol(); // call the function lol() thats inside the $(document).ready() 
} 

risposta

48

definire la funzione sull'oggetto finestra per renderla globale dall'interno di un altro ambito funzione:

$(document).ready(function(){ 
    window.lol = function(){ 
    alert('lol'); 
    } 
}); 
+0

questa semplice soluzione funziona per me –

+1

Questa è una grande soluzione, mi ha salvato ore! – Oritm

+0

Tra tutte le risposte confuse o complesse che ho trovato, questa è l'unica cosa che ha funzionato per me. – jyoseph

37

Al di fuori del blocco in cui è definita la funzione, è fuori ambito e non sarà possibile chiamarlo.

Non è tuttavia necessario definire la funzione. Perché non è sufficiente:

function lol() { 
    alert("lol"); 
} 

$(function() { 
    lol(); //works 
}); 

function dostuff(url) { 
    lol(); // also works 
} 

Si potrebbe definire la funzione a livello globale in questo modo:

$(function() { 
    lol = function() { 
    alert("lol"); 
    }; 
}); 
$(function() { 
    lol(); 
}); 

che funziona ma non è raccomandato. Se stai per definire qualcosa nello spazio dei nomi globale dovresti usare il primo metodo.

+1

Credo che quando si cerca di definire funzione globale dall'interno del secondo esempio, per evitare ambiguità è possibile utilizzare questo: 'finestra [ 'lol'] = function () {/ * corpo della funzione * /}; '. – Tadeck

+0

http://api.jquery.com/ready/ –

+0

verrrrrrrrrrrry goooooooooooooood questo – ashkufaraz

3

Versione corta: non è possibile, è fuori portata. Definire il metodo come questo modo che sia disponibile:

function lol(){ 
    alert('lol'); 
} 

$(function(){ 
    lol(); 
}); 
0

cosa circa il caso in cui prototipo è stato installato con jQuery e abbiamo impostato noconflicts per jQuery?

jQuery(document).ready(function($){ 
    window.lol = function(){ 
      $.('#funnyThat').html("LOL"); 
    } 
}); 

Ora possiamo chiamare lol da qualsiasi luogo, ma abbiamo introdotto un conflitto con Prototype?

3

Non ne hai bisogno e di questo - Se una funzione è definita al di fuori del documento.Pronti - ma vuoi chiamarci Documento.Pronto - ecco come lo fai - queste risposte mi hanno portato nella direzione sbagliata , non digitare di nuovo la funzione, solo il nome della funzione.

 $(document).ready(function() { 
    fnGetContent(); 
     }); 

Dove fnGetContent è qui:

 function fnGetContent(keyword) { 
      var NewKeyword = keyword.tag; 
      var type = keyword.type; 
      $.ajax({ ....... 
+3

Ciò sta rispondendo all'inverso della domanda reale, ma non è downvoted in quanto è ancora un po 'utile per chi lo cerca. – Michael

+0

Ho downvoted perché non risponde alla domanda – bonez

Problemi correlati