2012-12-19 42 views
26

Tôi có một phần tử div với một số phần tử bên trong nó như các nút, v.v. có trình xử lý sự kiện gắn liền với chúng. Tôi biết mình có thể đi:Jquery Xóa tất cả các trình xử lý sự kiện bên trong phần tử

$("#button1").off() 

Để loại bỏ các handler cho một nút nhưng tôi muốn làm một cái gì đó như thế này nếu có thể:

$("#div1").removeChildHandlers(); 

Có một chức năng có nguồn gốc trong JQuery để làm điều này hoặc tôi sẽ phải lặp lại tất cả các yếu tố và loại bỏ 1 của 1?

+0

là có thể '.find ('nút') tắt() 'gì Bạn đang tìm kiếm? –

+0

Không có gì cụ thể hơn – Nuvolari

+0

có thể trùng lặp của [Loại bỏ tất cả các trình xử lý sự kiện jQuery] (http://stackoverflow.com/questions/12377854/remove-all-jquery-event-handlers) – Antony

Trả lời

31

jQuery sẽ làm vòng lặp cho bạn cho chỉ con cái trực tiếp:

$("#div1").children().off(); 

hoặc nếu bạn muốn tất cả con cháu:

$("#div1").find("*").off(); 
+0

Cảm ơn tôi nghĩ rằng đó chỉ là về tất cả các khả năng mà tôi đang tìm kiếm. – Nuvolari

+0

Cảm ơn vì điều này. Tôi thấy khó xác định liệu trình xử lý sự kiện đã tồn tại mà không theo dõi thủ công nó. Biến tất cả các trình xử lý hậu duệ cho phép tôi chỉ áp dụng lại chúng ngay sau đó. Có khả năng không tốt cho hiệu suất, nhưng một giải pháp nhanh chóng là tuyệt vời để có! –

+0

sự khác biệt chính giữa '$ (" # div1 ") là gì(). Off()' từ '$ (" # div1 "). Off()'? –

3

Liệu trợ giúp này:

$("#div1").find('*').off(); 
+0

Thay vì '$ (" # div1 ") .find ('*') 'người ta có thể sử dụng bộ chọn CSS' $ ("# div1 *") '. – skobaljic

1

Thử với

$("#div1 >* ").off(); 

Hoặc:.

$("#div1").find('button').off(); 

nếu bạn đang nói về <button> yếu tố

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