2008-11-05 7 views
36

Używam delegowania zdarzeń do nasłuchiwania zdarzeń niższych w DOM, ale nie działa on w przypadku zdarzenia onchange w polu wyboru. Czy zdarzenie onchange propaguje lub rzutuje na DOM?Czy zdarzenie onchange jest propagowane?

Googling nie znalazł rozstrzygającej odpowiedzi.

Odpowiedz

35

According to specification, "zmień", "prześlij", "zresetuj" powinno bańką, a "fokus" i "rozmycie" nie powinny bańką.

Takie zachowanie jest realizowany właściwie we wszystkich przeglądarkach z wyjątkiem IE < 9, czyli zmiany, złożyć, reset zrobić bańkę prawidłowo w IE> = 9.

Zobacz https://stackoverflow.com/a/4722246/227299 na obejście jQuery na starych wersjach IE

+2

IE <9, czyli 9 - ok – 4esn0k

+2

Przypadek testowy: http://jsfiddle.net/5x8tk/ –

+2

Nie rozumiem pierwsze zdanie tej odpowiedzi, jeśli to prawda, jak mówisz, że zmiana jest określona jako propagacja i jest właściwie zaimplementowana w większości przeglądarek. Czy to błąd? – enigment

-2

Nie jestem pewien, czy otrzymam pytanie, ale jeśli masz na myśli to, to NIE.

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

Gdzie div id = "foo" miałby zdarzenie onchange ... pojawiające się na liście wyboru?


na powiązana uwaga, tylko do Twojej wiadomości nie można dołączyć zdarzenie do opcji w liście wyboru w IE (dobrze, można ale nie ogień)

0

I haven” Zajmowałem się tym przez jakiś czas, ale ostatnim razem, pamiętałem, że Firefox rozpoznał to wydarzenie na elemencie <SELECT>, podczas gdy IE6 rozpoznało tylko zdarzenia na tagach <OPTION>. O ile pamiętam.

IE7 nie było w tym czasie.

Jeśli tak jest, to jeszcze lepiej jest nie pisać inline handler zdarzenia i zastosować go w DOM gotowy, bo nie będziesz miał wiele zanieczyszczonego, powtarzalnego kodu.

+0

No IE ma błąd w tym, że nie rejestrować zdarzenia dotyczące

23

w jQuery 1.4+ zmiana bąble zdarzeń we wszystkich przeglądarkach, w tym w IE.

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

Dzięki za podpowiedź! – rahmanisback