2008-11-05 27 views
36

Tôi đang sử dụng ủy quyền sự kiện để nghe các sự kiện thấp hơn trong DOM, nhưng nó không hoạt động cho sự kiện onchange trên một hộp chọn. Sự kiện onchange có lan truyền hoặc bong bóng lên DOM không?Sự kiện trao đổi có lan truyền không?

Googling đã thất bại trong việc tìm kiếm một câu trả lời kết luận.

Trả lời

35

According to specification, "thay đổi", "gửi", "đặt lại" nên bong bóng và "tiêu điểm" và "làm mờ" không được bong bóng.

Hành vi này được thực hiện đúng trong tất cả các trình duyệt web IE trừ < 9, có nghĩa là, thay đổi, nộp, thiết lập lại làm bong bóng đúng trong IE> = 9.

Xem https://stackoverflow.com/a/4722246/227299 cho một workaround jQuery trên các phiên bản IE cũ

+2

IE <9, nghĩa là 9 - ok – 4esn0k

+2

Trường hợp kiểm tra: http://jsfiddle.net/5x8tk/ –

+2

Tôi không hiểu câu đầu tiên của câu trả lời này, nếu nó là sự thật, như bạn nói, thay đổi đó là spec'd như bubbling, và nó được thực hiện đúng trong hầu hết các trình duyệt. Đó có phải là một sai lầm? – enigment

-2

Không chắc chắn nếu tôi nhận được câu hỏi, nhưng nếu bạn có ý nghĩa này, thì KHÔNG.

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

Trường hợp div id = "foo" có sự kiện onchange ... sẽ xuất hiện trong danh sách chọn?


trên một lưu ý liên quan, chỉ là một FYI bạn không thể đính kèm một sự kiện để các tùy chọn trong danh sách lựa chọn trong IE (tốt, bạn có thể nhưng nó sẽ không cháy)

0

tôi thiên đường' Tôi đã xử lý vấn đề này trong một thời gian, nhưng lần cuối tôi làm, tôi nhớ rằng Firefox đã nhận ra sự kiện trên phần tử <SELECT>, trong khi IE6 chỉ nhận ra các sự kiện trên các thẻ <OPTION>. Càng xa tôi càng nhớ.

IE7 không ra tại thời điểm đó. Vì vậy, nếu đây là trường hợp, nó thậm chí còn có ý nghĩa hơn để không viết xử lý sự kiện nội tuyến và áp dụng nó trên DOM sẵn sàng thay vào đó, vì sợ rằng bạn sẽ có rất nhiều mã bị ô nhiễm, lặp đi lặp lại.

+0

Không IE có lỗi ở chỗ nó không đăng ký các sự kiện trên

23

Trong jQuery 1.4+ sự thay đổi bong bóng sự kiện trong tất cả các trình duyệt, bao gồm cả IE.

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

Cảm ơn bạn đã gợi ý! – rahmanisback

Các vấn đề liên quan