2010-03-11 20 views
5

Ho una domanda interessante qui che può sembrare piuttosto stupida, ma qui va. Usando la funzione pronta di JQuery Ho definito alcune funzioni in questo modo:

$(function(){ 

    var function1 = function(data){ 
    //do something 
    } 

    var function2 = function(data){ 
    //do something else 
    } 
}); 

Per qualche ragione, al fine di IE per rendere quello che sto usando correttamente, deve essere fatto nel $ (document) .ready function() . Tuttavia, ho bisogno di attivare queste funzioni una volta che ho un set di dati dal lato server. Così ho pensato di fare qualcosa di simile ...

Object.Namespace.callFunction = function(data){ 
function1(data); 
} 

... per essere collocato al di fuori della funzione pronto in uno script in modo che potessi chiamarlo direttamente.

Purtroppo, so che questo non funziona perché, non sembra logico e l'ho provato !. Ho reso tutte queste funzioni arbitrarie perché non importa il contenuto, ma piuttosto il concetto. Ho anche provato a utilizzare i gestori di eventi per attivare la funzione una volta che ho ricevuto quei dati - inutilmente! Qual è il modo migliore per creare funzioni all'interno di $ (document) .ready() globale?

+2

Non sono un esperto di JQuery, ma perché non definisci le funzioni come globali in primo luogo usando i blocchi 'function function1 (data) {...}' della vecchia scuola? –

+2

Come altri hanno già detto, la risposta è semplicemente definire le funzioni come funzioni. Perché questo non funziona in IE? *Questa è la domanda. – harpo

+0

quelli erano solo esempi di base. Sto anche lavorando con il plug-in ExtJS Slider e per qualche motivo IE non li renderà correttamente a meno che non vengano eseguiti all'interno di doc.ready(). – sctskw

risposta

6

Se (per ragioni stilistiche) per scrivere la funzione inline con il vostro $ (document) .ready, Si può fare in questo modo:

var app={}; /*Use whatever your apps name is, abbreviated (something short)*/ 
$(function() 
{ 
    app.function1 = function(data) { }; 
    app.function2 = function(data) { }; 
    // now you can call all functions inside and outside this ready function with the app. prefix 
    // if you also want a local reference to the function without the app. prefix, you can do: 
    var function1 = app.function1 = function(data) { }; 
}); 
+0

o window.functionName (anche window.app.functionName funzionerà) –

6

Se si definiscono funzioni globali, non c'è motivo di averle nel documento pronto. Le uniche cose che dovrebbero essere pronte nel documento sono le cose che devono essere attendere che il documento sia pronto per agire. La definizione della funzione può avvenire prima che il documento sia pronto.

// Defining the functions in the global scope. 
var function1 = function(data){ 
    //do something that requires the dom to be ready. 
} 

var function2 = function(data){ 
    //do something else that requires the dom to be ready. 
} 
$(function() { 
    // Running the functions when the document is ready. 
    function1(); 
    function2(); 
}); 
+0

Non potrei essere più d'accordo ... ma sfortunatamente, per rendere tutto correttamente sulla pagina, devo aspettare che sia pronto. In questo caso ... Non posso chiamare direttamente la funzione che devo essere in grado di fare. – sctskw

+1

@ user291928 quindi definire le funzioni al di fuori del documento pronto e chiamarle quando il documento è. – PetersenDidIt

3

che dire

function function1(data){ 
    //do something 
    } 
    function function2(data){ 
    //do something else 
    } 

    $(function(){ 
     // if you need to call inside ready 
     function1(); 
     function2(); 
    }); 
+0

Grazie ... Non stavo pensando di avvolgere la mia chiamata di funzione nella funzione ready. Sembra strano fare da dove è il codice, ma questo ha funzionato bene. grazie ancora. – sctskw

+0

Questo è il modo per farlo. In realtà io di solito uso un singolo oggetto globale con quelle funzioni come proprietà per evitare di inquinare lo spazio dei nomi globale, ma la stessa idea. – Plynx

+0

@Plynx, sono d'accordo con te, è stata una tale fretta, ma questa è l'idea principale, buona risposta! –

Problemi correlati