2012-08-03 42 views
5

Tôi có điều này:Hủy bỏ các sự kiện với jquery hoặc javascript

$(function(){ 
    //remove keydown doSomething2 
    $("body").keydown(doSomething1); 
}); 

Theo quan điểm khác tôi có điều này:

$(function(){ 
    //remove keydown doSomething1 
    $("body").keydown(doSomething2); 
}); 

Làm thế nào để làm những gì trong những nhận xét? Với mã hiện tại của tôi, cả doSomething1 và doSomething2 đều được gọi. Tôi muốn làm vô hiệu hóa một trong những tôi không cần.

+0

tôi khuyên bạn nên giữ xử lý sự kiện và thêm một biến mà nói gì làm gì khi một phím được nhấn. –

Trả lời

9

Để xóa một người biết lắng nghe sự kiện với jQuery, bạn có thể sử dụng .off():

$("body").off("keydown", doSomething2); 

Hãy nhớ rằng các keydown method chỉ là một phím tắt cho .on("keydown", ...).

Tuy nhiên, để "vô hiệu hóa", có thể dễ dàng chỉ có một trình xử lý thực hiện những thứ khác nhau dựa trên chế độ xem hiện tại đã chọn hoặc cả hai đều bị ràng buộc và mỗi lần kiểm tra ngắn .

4

Nếu doSomething2 là một tài liệu tham khảo chức năng, bạn có thể sử dụng .off() (jQuery 1.7+) hoặc .unbind() để loại bỏ các event handler jQuery ràng buộc:

$('body').off('keydown', doSomething2); 

// or 

$('body').unbind('keydown', doSomething2); 

Lưu ý rằng để thực hiện sẽ là một yếu tố. Nếu mã để unbind xử lý sự kiện được chạy đầu tiên nó sẽ không có hiệu lực. Nói chung, các trình xử lý sự kiện jQuery được kích hoạt theo thứ tự chúng bị ràng buộc, vì vậy nếu đoạn mã đầu tiên trong câu hỏi của bạn được thực thi trước, phương pháp này sẽ không hoạt động (bạn sẽ cần phải sắp xếp lại nó).

4

thử này như dưới đây sử dụng jQuery:

$(function(){ 
    // this would remove keydown from body 
    $("body").unbind('keydown', doSomething2); 
}); 
Các vấn đề liên quan