Wieder einmal hat mich das IE-Monster mit einem seltsamen Problem getroffen.
Ich schreibe einige Änderungen in eine asp.net Seite, die ich vor einiger Zeit geerbt habe. Eines der Probleme besteht darin, dass auf einigen Seiten mehrere Steuerelemente vorhanden sind, die JavaScript-Funktionen als Handler zum Onload-Ereignis hinzufügen (wenn dies von Bedeutung ist, wird YUI verwendet). Einige dieser Event-Handler gehen davon aus, dass bestimmte andere Funktionen ausgeführt wurden.
Dies ist gut und gut in Firefox und IE7, da die Handler in der Reihenfolge der Registrierung auszuführen scheinen. IE8 andererseits tut dies rückwärts .
Ich könnte mit einer Art von Double-Checking-Ansatz gehen, aber angesichts der Tatsache, dass die Kontrollen auf mehreren Seiten vorhanden sind, glaube ich, dass dies noch mehr Abhängigkeiten schaffen würde. Also habe ich angefangen, meine eigene Queue-Klasse zu kochen, auf die ich die Funktionen schiebe und deren Ausführungsreihenfolge steuern kann. Dann werde ich einen Onload-Handler registrieren, der die Warteschlange anweist, in meiner bevorzugten Reihenfolge auszuführen.
Ich bin durch das gegangen und habe angefangen, zwei Dinge zu fragen:
Hat jemand irgendwelche Einsichten? Irgendwelche sauberen Lösungen, die es mir erlauben, die Ausführungsreihenfolge leicht durchzusetzen?
Ich konnte keinen Standard finden, der die Anrufreihenfolge von Ereignissen definieren würde. Dies ist kein Problem das ist reine Anarchie : D
Es gibt auch Hunderte von unabhängigen Implementierungen dieses Musters, daher ist es unwahrscheinlich, dass sie sich in absehbarer Zeit kohärent verhalten würden.
Also ja, du bist alleine.
Der sauberste und kompatibelste Ansatz, den ich habe, besteht darin, nur einen Ereignishandler zu registrieren: D Auf diese Weise wird die native Reihenfolge irrelevant.
Jetzt ist der Trick, dass Sie Ihr eigenes vorhersagbares Event-Management hinzufügen - mit einer Bibliothek, die je nach Ihren Anforderungen beispielsweise mit der Version von nodeJS erweitert wird.
Beachten Sie, dass JS Ihnen die Freiheit gibt, die vom Prototyp abgeleiteten Funktionen einfach außer Kraft zu setzen. Eine andere Möglichkeit ist etwa so:
%Vor%Vielleicht sind Sie ein bisschen daneben, wenn es um Warteschlangen und Sperrmechanismen geht:)
Tags und Links javascript events javascript-events