2012-03-26 15 views
2

Ich bin mit zwei Funktionen ein von dieser Seite ist http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/ und seine Verwendung Funktionsaufruf wie folgt aus:Zwei Javascript-Funktionen ein window.onload = Custom.init; und eine window.onload = function() {

window.onload = Custom.init; 

und nach, dass ich mit einer anderen Funktionsaufruf wie dies

window.onload = function() {... 

Die zweite tötet zuerst! Wie kann ich am zweiten ändern oder ändern, damit sie zusammenarbeiten können?

Antwort

2
window.onload = function() { 
    Custom.init(); 
    // ... 
}; 
+0

dieser geholfen, aber wenn putted zweite an erster Stelle wie diese 'window.onload = function() { somefunction.init(); \t Custom.init(); }; ' – munge83

0

Sie müssen Ihre eigene Funktion erstellen, die sie beide aufruft.

window.onload = function(){ 
    Custom.init(); 
    function() { ... } 
} 
+0

Sie müssen es sicherlich nicht so machen, und 'addEventListener' /' attachEvent' ist sauberer. –

+0

@MatthewFlaschen Ich würde tatsächlich argumentieren, dass es nicht seit dem ist, die Erkennung der unterstützten Version zu tun und zwei verschiedene Mechanismen dafür bereitzustellen. Auch wenn es "geeigneter" ist, ist dies viel schneller und sauberer, da Sie sich keine Sorgen über die Schnittstellenunterstützung machen müssen. – tkone

+0

Deshalb habe ich jQuery oder eine andere Bibliothek empfohlen. –

0

für diese Meine Präferenz ist:

loadFunctions = []; 
window.onload = function() {var x; while(x = loadFunctions.shift()) x();}; 

dann statt window.onload der Einstellung, das tue ich:

loadFunctions.push(function() {...}); 

Natürlich, ich kann dies tun, weil ich m keine externen Bibliotheken zu verwenden, die window.onload stören könnten.

EDIT: Wenn Sie nicht die Kontrolle über eine von ihnen haben, könnten Sie dies tun:

var ool = window.onload; 
window.onload = function() { 
    if(ool) ool(); 
    // new code here 
}; 
+0

kleiner Overkill hier, nein? – jAndy

+1

Art von, aber es ist erweiterbar^_^ –

0

manuell Custom.init nennen?

window.onload = function() { 
    Custom.init(); 
    //your stuff 
}; 
0

Wie wäre es mit einem netten kleinen Wrapper für alle onLoad Event-Handler?

window.onLoadHandlers = []; 
window.onLoad = function() { 
    while (window.onLoadHandlers.length) { 
     window.onLoadHandlers.shift()(); 
    } 
}; 

Dann drücken Sie einfach die beiden Funktionen zu diesem Array:

window.onLoadHandlers.push(Custom.init); 
window.onLoadHandlers.push(function() { ... 

Sie obwohl jQuery oder jede andere Bibliothek betrachten kann verwenden, um eine bessere Lösung für diese zur Verfügung stellt.

4

Verwenden Sie addEventListener/attachEvent. Sie können eine Bibliothek verwenden, die diese abstrahiert, z. B. jQuery:

$(window).load(function() { 
    // run code 
}); 

Dies kann mehrmals mit verschiedenen Funktionen ohne Probleme ausgeführt werden.

+0

Wenn er jQuery gesagt hätte, könnte eine jQuery Antwort angemessen sein.Aber die Frage war konkret, wie man es in JavaScript macht. Laden einer Bibliothek, nur um weg zu abstrahieren 'addEventListener' /' attachEvent' ist etwas übertrieben .... – tkone

+0

Ich denke, mit dem addEventListener/attachEvent ist der Weg zu gehen ... natürlich verwendet IE eine Nominationsform, während WebKit und FF benutze einen anderen, also musst du beide berücksichtigen. Eine Bibliothek macht es so, dass Sie sich darüber keine Gedanken machen müssen, aber es ist auch nicht so schlimm, wenn Sie ein paar Minuten dafür aufwenden. – Matt

+0

@tkone, ich sagte ausdrücklich, er * kann * das tun, und ich gab die zugrunde liegenden Methoden. Höchstwahrscheinlich könnten andere Teile seines Codes von einer Bibliothek profitieren (es muss nicht jQuery sein). –

Verwandte Themen