Hãy xem xét đoạn mã sau
<ul id="myTask">
<li>Coding</li>
<li>Answering</li>
<li>Getting Paid</li>
</ul>
Bây giờ, ở đây đi sự khác biệt
// Remove the myTask item when clicked.
$('#myTask').children().click(function() {
$(this).remove()
});
Bây giờ, nếu chúng ta thêm một myTask một lần nữa?
$('#myTask').append('<li>Answer this question on SO</li>');
Nhấp vào mục myTask này sẽ không xóa mục này khỏi danh sách vì nó không có trình xử lý sự kiện nào bị ràng buộc. Nếu thay vào đó, chúng tôi đã sử dụng .on
, mục mới sẽ hoạt động mà không cần thêm bất kỳ nỗ lực nào từ phía chúng tôi. Đây là cách phiên bản .Trên sẽ nhìn:
$('#myTask').on('click', 'li', function (event) {
$(event.target).remove()
});
Tóm tắt:
Sự khác biệt giữa .on()
và .click()
sẽ là .click()
có thể không hoạt động khi các yếu tố DOM gắn liền với sự kiện .click()
được thêm tự động tại một điểm sau đó trong khi .on()
có thể được sử dụng trong các tình huống trong đó các phần tử DOM được kết hợp với cuộc gọi .on()
có thể được tạo động vào một thời điểm sau đó.
Nguồn
2013-02-14 16:24:20
Bạn đã đọc tài liệu hay thực hiện tìm kiếm trên trang web này. Nên có một vài triệu câu trả lời để lựa chọn? – adeneo
Đọc về ủy quyền sự kiện trong tài liệu API của '.on()', trong [phần này] (http://api.jquery.com/on/#direct-and-delegated-events) –
Bạn sẽ nhận được "điểm đói" hà mã trả lời này, mặc dù thực tế là nó rõ ràng tài liệu. Mã đầu tiên cho biết "khi tài liệu được nhấp vào, nếu đó là nội dung có ID #id thì hãy kích hoạt mã này". Điều thứ hai nói "khi bất kỳ thứ gì hiện đang tồn tại với ID #id được nhấp, hãy kích hoạt mã này". Điều đầu tiên là gán sự kiện cho các phần tử không tồn tại vào thời điểm đó, nhưng sẽ làm trong tương lai. Thứ hai sẽ không kích hoạt bất kỳ phần tử nào được thêm vào sau. – Archer