2010-03-11 20 views
5

Ich habe eine interessante Frage hier, die vielleicht ziemlich albern klingt, aber hier geht. Mit JQuery der Ready-Funktion Ich habe einige Funktionen definiert wie folgt:

$(function(){ 

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

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

Aus irgendeinem Grund, um IE zu machen, was ich richtig verwende, muss es in der $ (document) erfolgen .ready() Funktion . Allerdings muss ich diese Funktionen auslösen, sobald ich einen Datensatz von der Serverseite habe. Also dachte ich, ich so etwas tun würde ...

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

... außerhalb der Ready-Funktion in einem Skript platziert werden, so dass ich es direkt anrufen können.

Leider weiß ich, dass das nicht funktioniert, denn es scheint nicht logisch und ich habe es ausprobiert !. Ich habe all diese Funktionen willkürlich gemacht, weil es nicht auf den Inhalt, sondern auf das Konzept ankommt. Ich habe auch versucht, Event-Handler zu verwenden, um die Funktion auszulösen, sobald ich diese Daten bekomme - ohne Erfolg! Was ist der beste Weg, um Funktionen innerhalb der $ (document) .ready() global zu machen?

+2

Ich bin kein JQuery-Experte, aber warum definieren Sie die Funktionen nicht in erster Linie mit Old-School 'Funktion Funktion1 (Daten) {...}' Blöcke? –

+2

Wie andere bereits gesagt haben, besteht die Antwort einfach darin, die Funktionen als Funktionen zu definieren. Warum funktioniert das nicht in IE? *Das ist hier die Frage. – harpo

+0

das waren nur einfache Beispiele. Ich arbeite auch mit ExtJS Slider Plugin und aus irgendeinem Grund werden IE sie nicht richtig rendern, wenn sie nicht innerhalb der doc.ready() gemacht werden. – sctskw

Antwort

6

Wenn Sie (aus stilistischen Gründen) wollen die Funktion inline mit Ihrem $ (document) .ready schreiben, können Sie es auf diese Weise tun:

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

oder window.functionName (window.app.functionName wird auch funktionieren) –

6

Wenn Sie globale Funktionen definieren, gibt es keinen Grund, sie im Dokument bereit zu haben. Die einzigen Dinge, die in das Dokument gehen sollten, sind Dinge, die warten müssen, bis das Dokument bereit ist, zu handeln. Die Funktion kann definiert werden, bevor das Dokument fertig ist.

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

konnte ich nicht mehr zustimmen ... aber leider um alles richtig auf der Seite rendern zu können, muss ich warten, bis es fertig ist. In diesem Fall ... kann ich die Funktion nicht direkt aufrufen, was ich tun muss. – sctskw

+1

@ user291928 dann definieren Sie die Funktionen außerhalb des Dokuments bereit und rufen sie auf, wenn das Dokument ist. – PetersenDidIt

3

was

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

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

Danke ... Ich habe nicht daran gedacht, meinen Funktionsaufruf in die Bereit-Funktion zu bringen. Es scheint einfach komisch zu sein, von wo der Code ist, aber das funktioniert gut. Danke noch einmal. – sctskw

+0

Dies ist der Weg, es zu tun. Tatsächlich verwende ich normalerweise ein einzelnes globales Objekt mit diesen Funktionen als Eigenschaften, um den globalen Namensraum nicht zu verschmutzen, aber die gleiche Idee. – Plynx

+0

@Plynx, ich stimme dir zu, das war so eine Eile, aber das ist die Hauptidee, gute Antwort! –

Verwandte Themen