2010-06-01 33 views
7

Tôi đang cố gắng hủy liên kết tất cả các trình xử lý sự kiện cho tất cả các phần tử bên trong một vùng chứa cụ thể. Giống như một DIV. Nhưng những sự kiện đó đã bị ràng buộc/đăng ký không sử dụng jQuery. Một số bị ràng buộc theo cách thủ công với onclick="...." hoặc sử dụng JavaScript gốc thông thường.Phương thức jQuery .unbind() chỉ hoạt động trên các sự kiện tạo jQuery?

Nhưng khi tôi làm điều gì đó như thế này

$('#TheDivContainer').find('div,td,tr,tbody,table').unbind(); 

Nó không xuất hiện để làm việc. Điều này khiến tôi tin rằng .unbind() chỉ hoạt động nếu các sự kiện ban đầu bị ràng buộc bởi jQuery.

Điều đó có đúng không? Có cách nào khác để ngăn chặn tất cả các sự kiện từ một nhóm các nguyên tố không?

Cảm ơn!

Trả lời

7

Bạn nói đúng. Như trong API:

Bất kỳ xử lý đã được gắn liền với .bind() có thể được loại bỏ bằng .unbind().

3

Bạn luôn có thể làm điều này:

$('#TheDivContainer').find('div,td,tr,tbody,table') 
    .unbind('click') 
    .attr('onclick', ''); // edited to change null to '' 

vv cho tất cả các loại sự kiện phù hợp.

+0

Tôi mệt mỏi đề nghị của bạn ... buồn bã nó không hoạt động – 7wp

+0

nó hoạt động cho tôi - xem trang kiểm tra này: http://gutfullofbeer.net/unbind.html - bạn có thể thử gọi 'attr()' với một chuỗi rỗng làm thông số thứ hai thay vì một null! – Pointy

3

Bỏ liên kết sẽ chỉ hoạt động trên các sự kiện do jQuery tạo ra vì tất cả các phương thức thực hiện điều này (addEventListener và attachEvent) yêu cầu cả trình xử lý, tên sự kiện, . bind sẽ chăm sóc của lưu trữ này cho bạn ..

Bằng cách này, dom0 listerens sự kiện phong cách (.foo = function(...) có thể chỉ bằng cách loại bỏ bằng cách thiết lập thuộc tính tương tự cho cái gì khác như null.

Các vấn đề liên quan