2009-09-06 22 views
9

Tôi có một số yếu tố có sự kiện bị ràng buộc. Trước khi tôi xóa các yếu tố đó, tôi có cần phải hủy liên kết chúng trước không? Nếu tôi không họ sẽ gây ra vấn đề?jquery unbinding là nó cần thiết? (thay thế các phần tử)

Cảm ơn.

Chỉnh sửa: Tôi nhận ra rằng tôi đã đặt câu hỏi sai, vì vậy bây giờ tôi đang chỉnh sửa, xin lỗi vì điều đó, nhưng tôi nghĩ sẽ có ý nghĩa hơn khi thực hiện câu hỏi mới.

Tôi sẽ phải sử dụng unbind hoặc xóa trên một phần tử nếu tôi thay thế nó, phải không? Với phương thức thay thế js hoặc phương thức html trong jquery.

Trả lời

17

Không, bạn không cần phải làm điều đó (sự kiện unbinding được thực hiện tự động khi xóa).

+7

Điều gì xảy ra nếu div bị xóa bằng jQuery ('div'). Html (''); và thứ gì đó bên trong div đó có một sự kiện nhấp chuột hoặc bị ràng buộc. Nó có được tự động hóa không. – kr1zmo

+0

@ kr1zmo đây là nội dung tôi đang tìm kiếm ... – rtpHarry

+3

'.html (htmlString)' [cũng sẽ hủy liên kết sự kiện của nó] (http://api.jquery.com/html/#html2) "Ngoài ra, jQuery loại bỏ các cấu trúc khác như dữ liệu và trình xử lý sự kiện từ các phần tử con trước khi thay thế các phần tử đó bằng nội dung mới. " – rtpHarry

1

Không, nó sẽ không gây ra bất kỳ vấn đề gì (trừ khi ai đó có một kinh nghiệm khó chịu mà họ muốn chia sẻ :) Tiền của tôi là 'nó không quan trọng!'.

Ngoại lệ duy nhất tôi có thể nghĩ là nếu bạn đang thực hiện bất kỳ ràng buộc sự kiện trực tiếp nào, trong trường hợp bạn không muốn các phần tử mới được chèn vào có cùng trình xử lý sự kiện của các yếu tố bạn đã xóa khỏi DOM. Sau đó, bạn nên loại bỏ mọi trình xử lý sự kiện (trực tiếp) trước khi xóa khỏi DOM, điều đó có nghĩa là bạn có thể thực hiện điều đó ở bất kỳ giai đoạn nào và không nhất thiết trước khi xóa.

7

Thời gian duy nhất mà bạn sẽ cần phải hủy liên kết rõ ràng là nếu bạn không còn muốn xử lý sự kiện cho một sự kiện trên trang nữa.

Xóa phần tử khỏi DOM cũng làm cho các sự kiện và dữ liệu cho phần tử đó cũng bị xóa. Đây là mã nguồn có liên quan

remove: function(selector) { 
    if (!selector || jQuery.filter(selector, [ this ]).length) { 
     // Prevent memory leaks 
     jQuery("*", this).add([this]).each(function(){ 
      jQuery.event.remove(this); 
      jQuery.removeData(this); 
     }); 
     if (this.parentNode) 
      this.parentNode.removeChild(this); 
    } 
} 
Các vấn đề liên quan