Nếu bạn đã từng tạo động nội dung trang hoặc tải nội dung thông qua AJAX, thì ví dụ sau đây thực sự là cách bạn nên làm:
- Nó ngăn chặn ràng buộc kép trong trường hợp tập lệnh được tải nhiều lần, chẳng hạn như trong một yêu cầu AJAX.
- Liên kết tồn tại trên
body
tài liệu, vì vậy bất kể phần tử nào được thêm vào, di chuyển, xóa và thêm lại, tất cả các phần tử con của việc body
khớp với bộ chọn được chỉ định sẽ giữ lại liên kết thích hợp.
Mật mã:
var bind_to = ':input';
$(document.body).off('change', bind_to);
$(document.body).on('change keyup', bind_to, function(event) {
alert('something happened!');
});
Xin hãy chú ý! Tôi đang sử dụng $.on()
và $.off()
thay vì sử dụng các phương pháp khác vì một số lý do:
$.live()
và $.die()
không được dùng nữa và đã bị loại bỏ khỏi các phiên bản jQuery mới hơn.
- Tôi cần phải xác định một hàm riêng biệt (do đó làm lộn xộn phạm vi toàn cục,) và chuyển hàm cho cả hai
$.change()
và $.keyup()
riêng biệt, hoặc chuyển cùng một khai báo hàm cho mỗi hàm được gọi; Sự trùng lặp logic ... Đó là điều hoàn toàn không thể chấp nhận được.
- Nếu các phần tử đã từng được thêm vào DOM,
$.bind()
không liên kết động với các phần tử khi chúng được tạo. Do đó, nếu bạn liên kết với :input
và sau đó thêm một đầu vào vào DOM, thì phương thức liên kết đó sẽ không được gắn với đầu vào mới. Sau đó, bạn cần phải hủy ràng buộc một cách rõ ràng và sau đó liên kết lại với tất cả các phần tử trong DOM (nếu không, các liên kết sẽ bị trùng lặp). Quá trình này sẽ cần được lặp lại mỗi khi một đầu vào được thêm vào DOM.