Không khó để làm từ jQuery đã lưu trữ tất cả các trình xử lý sự kiện của nó là data()
trên chính phần tử đó. Bạn có thể nhận (và sửa đổi) đối tượng này thông qua .data().events
.
Hãy thử$("#portalLink a").data().events.click = null
trong giao diện điều khiển của bạn ngay bây giờ để tắt tùy chọn "StackExchange" thả xuống phía trên bên trái của trang này.
Bây giờ bạn có thể dễ dàng lưu một tham chiếu đến bộ xử lý với:
events._click = events.click;
events.click = null;
Và sau đó khôi phục chúng bằng cách sử dụng:
events.click = events._click;
events._click = null;
Lưu ý rằng điều này sẽ không vô hiệu hóa những sự kiện đang bị ràng buộc qua .delegate()
hoặc .live()
, khi chúng hoạt động bằng sự kiện sủi bọt/tuyên truyền. Để vô hiệu hóa những người là tốt, chỉ cần gắn một handler mới mà khối tuyên truyền đến các yếu tố tổ tiên:
events._click = events.click;
events.click = null;
// Block .live() and .delegate()
$("#el").click(function (e) {
e.stopPropagation();
});
Bạn thậm chí không cần phải unbind chức năng chặn này khi đó là thời gian để cho phép xử lý một lần nữa, vì events.click = events._click
sẽ ghi đè lên chức năng bạn chỉ bị ràng buộc với tất cả các trình xử lý cũ.
Nguồn
2011-01-04 13:36:34
Bạn có thể muốn xem xét lại cách tiếp cận của bạn - nếu bạn muốn có một nút không hoạt động , vô hiệu hóa nó. Những lá cờ đó cho người dùng rõ ràng rằng nút bị tắt. Nó dễ hiểu hơn, đơn giản hơn và phù hợp hơn so với làm việc xung quanh hành vi mặc định. Tại sao bạn muốn tránh vô hiệu hóa nút? –
Vì, AFAIK, các nút bị tắt không thể được tạo kiểu. – Ovesh