Ai đó có thể giải thích cho tôi tại sao có sự khác biệt về thứ tự xử lý sự kiện đang được thực hiện tùy thuộc vào cách họ đã được đính kèm? Trong ví dụ bên dưới, tôi đang sử dụng các phương pháp .on()
và .addEventListener()
để xử lý một sự kiện cụ thể trên các phần tử DOM
khác nhau.jQuery .on(); so với JavaScript .addEventListener();
jsfiddle: http://jsfiddle.net/etsS2/
Tôi nghĩ rằng trong ví dụ đặc biệt này theo thứ tự mà xử lý sự kiện sẽ được thực hiện sẽ phụ thuộc vào event-bubbling
- vì vậy bắt đầu từ sự kiện ban đầu target
và di chuyển lên đến document
phần tử.
document.getElementById('outer').addEventListener('mouseup', function (event) {
//$('#outer').on('mouseup', function (event) {
alert('This alert should not show up!');
}, false);
Nếu tôi bỏ ghi chú phiên bản on();
mọi thứ hoạt động như mong đợi - là có một sự khác biệt trong cách jQuery
xử lý sự kiện trái với thuần JavaScript
?
'return false' cũng có' event.preventDefault() 'cũng như' event.stopPropagation() 'trong trình xử lý sự kiện jQuery. – Jasper
Lý do tại sao tôi tạo cấu trúc này là do thực tế là phần tử 'a.link' được thêm động và bằng cách nào đó tôi cần ngăn chặn div bên ngoài xử lý sự kiện cụ thể đó - làm cách nào tôi có thể đạt được điều đó? Vì vậy, về cơ bản bạn có nghĩa là điều này: $ (tài liệu) .on ('mouseup', 'a.link' ...) là bằng này: $ ('a.link'). Sống ('mouseup', ...)? – MonkeyCoder
Có - cách duy nhất một cơ chế như '.live()', '.delegate()', hoặc '.on()' mới có thể hoạt động thông qua sủi bọt, và bọt hoạt động từ trong ra ngoài. Thay vào đó, bạn có thể đảm bảo rằng trình lắng nghe sự kiện cho các phần tử được thêm động được liên kết trực tiếp với các phần tử khi chúng được thêm vào DOM. – Pointy