Dưới đây là một ví dụ đơn giản:
function live(eventType, elementId, cb) {
document.addEventListener(eventType, function (event) {
if (event.target.id === elementId) {
cb.call(event.target, event);
}
});
}
live("click", "test", function (event) {
alert(this.id);
});
Ý tưởng cơ bản là bạn muốn đính kèm một event handler vào tài liệu và để cho các bong bóng sự kiện lên DOM. Sau đó, kiểm tra thuộc tính event.target
để xem nó có khớp với tiêu chí mong muốn hay không (trong trường hợp này, chỉ cần id
của phần tử).
Edit:
@shabunc phát hiện ra một vấn đề khá lớn với các sự kiện solution-- tôi trên yếu tố con sẽ không được phát hiện một cách chính xác. Một cách để khắc phục điều này là nhìn vào các yếu tố tổ tiên để xem nếu có có các quy định id
:
function live (eventType, elementId, cb) {
document.addEventListener(eventType, function (event) {
var el = event.target
, found;
while (el && !(found = el.id === elementId)) {
el = el.parentElement;
}
if (found) {
cb.call(el, event);
}
});
}
Nguồn
2012-02-02 02:33:38
Bạn luôn có thể đọc nguồn jQuery: p. Bạn không chắc chắn nó sẽ đến từ JS gốc như thế nào, vì tôi chắc chắn nó sẽ phụ thuộc rất nhiều vào chính nó vào thời điểm đó (về mặt sử dụng các bộ chọn và không biết). – Corbin
Chỉ một lưu ý: '.live()' không được chấp nhận trong một thời gian dài. Nó được thay thế bởi '.delegate()', được thay thế bởi '.on()', vì vậy hãy sử dụng cái cuối cùng. Hơn nữa, điều cuối cùng cho thấy sự khác biệt giữa ràng buộc và ủy quyền, vì vậy bạn có thể muốn xem xét. Điều quan trọng nhất là kiểm tra mục tiêu sự kiện. – Tadeck
Câu trả lời này của tôi có thể giúp http://stackoverflow.com/a/27373951/1385441 –