2008-11-05 7 views
36

Ich verwende die Ereignisdelegierung, um nach Ereignissen im DOM zu suchen, aber es funktioniert nicht für ein Onchange-Ereignis in einem Auswahlfeld. Führt das onchange-Ereignis das DOM aus oder sprudelt es auf?Wird das onchange-Ereignis weitergegeben?

Das Googeln hat keine schlüssige Antwort gefunden.

Antwort

35

According to specification, "ändern", "senden", "zurücksetzen" sollte Blase und "Fokus" und "Unschärfe" sollte nicht Blase.

Dieses Verhalten ist richtig in allen Web-Browsern außer IE < 9 implementiert, das heißt, zu ändern, senden, setzen Sie tun Blase richtig in IE> = 9.

Siehe https://stackoverflow.com/a/4722246/227299 für eine jQuery Abhilfe auf alten IE-Versionen

+2

IE <9, dh 9 - ok – 4esn0k

+2

Testfall: http://jsfiddle.net/5x8tk/ –

+2

Ich verstehe das nicht ersten Satz dieser Antwort, wenn es wahr ist, wie du sagst, ist diese Änderung sprudelnd, und sie ist in den meisten Browsern richtig implementiert. Ist das ein Fehler? – enigment

-2

Nicht sicher, ob ich die Frage bekomme, aber wenn du das meinst, dann NEIN.

<div id="foo"> 
    <select onchange="alert('hi');"> 
    <option>Hello</option> 
    <option>World</option> 
    </select> 
</foo> 

Wo die div id = "foo" würde ein OnChange-Ereignis haben ... sprudelt aus der Auswahlliste nach oben?


auf einem entsprechenden Hinweis, nur ein FYI Sie im Internet Explorer ein Ereignis zu den Optionen in der Auswahlliste nicht anhängen können (na ja, Sie können, aber es wird Feuer nicht) haven

0

I‘ Ich habe mich schon eine ganze Weile damit beschäftigt, aber beim letzten Mal habe ich gemerkt, dass Firefox das Ereignis auf dem Element <SELECT> erkannt hat, während IE6 nur Ereignisse auf den Tags <OPTION> erkannt hat. So weit ich mich erinnere.

IE7 war zu dieser Zeit nicht out.

Wenn dies der Fall ist, ist es noch sinnvoller, den Event-Handler nicht inline zu schreiben und stattdessen auf DOM ready anzuwenden, damit Sie nicht viel verschmutzten, sich wiederholenden Code haben.

+0

Nein IE hat einen Fehler, dass es nicht das Geschehen an den

23

In jQuery 1.4+ die Änderung Ereignisblasen in allen Browsern, einschließlich IE.

$('div.field_container').change(function() { 
    // code here runs in all browers, including IE. 
}); 
+0

Danke für deinen Hinweis! – rahmanisback

Verwandte Themen