2009-06-09 39 views
12
$('.ajax').click 
(  
    function() 
    { 
     // If been bound then we need to return here. 
     alert(':D'); 
    } 
) 

$('.ajax').click 
(
    function() 
    { 
     // If been bound then we need to return here. 
     alert(':D'); 
    } 
) 

Trong trường hợp này, tôi đã gọi là mã trùng lặp. Làm cách nào để phát hiện xem sự kiện đã bị ràng buộc để ngăn sự kiện kích hoạt hai hộp cảnh báo?Cách ngăn sự kiện bị ràng buộc nhiều lần

Trả lời

22

Có một cách thực sự tốt để làm điều này trong jQuery.

Đây là một ví dụ.

function alertEvent() { 
    alert(":D"); 
} 
$(".ajax").bind("click", alertEvent); 
//When you want to ensure it won't happen twice... 
$(".ajax").unbind("click", alertEvent); 
$(".ajax").bind("click", alertEvent); 

Phương pháp này sẽ chỉ xóa sự kiện bạn chỉ định, phương pháp này lý tưởng cho những gì bạn muốn làm.

+0

Làm cách nào để chuyển đối số nhấp chuột e với điều đó? Tôi có thể đi $ (". Ajax"). Bind ("click", alertEvent (e)); ? –

+0

xác định hàm là "function alertEvent (e)" để lấy đối số sự kiện. – mcrumley

6

thử unbinding nó trước khi ràng buộc:

$(".ajax").unbind("click").click( 
     function() { 
    alert("Hello"); 
    }); 

đọc this đối với một số thông tin hơn.

+0

này sẽ unbind tất cả các sự kiện nhấp chuột, không chỉ là sự kiện quy định. Tôi đã thêm một ví dụ sẽ chỉ hủy liên kết sự kiện bạn không muốn sao chép, có nghĩa là các sự kiện khác vẫn sẽ kích hoạt. – Fenton

15

Nếu sử dụng jQuery> = 1.7, bạn có thể sử dụng API .on()/.off() cùng với không gian tên sự kiện. Trong ví dụ này .off() được gọi ngay lập tức để đảm bảo sự kiện trước đó (dưới mọi hình thức) với không gian tên được un-bound:

$("form") 
    .off(".validator") 
    .on("keypress.validator", "input[type='text']", validate); 

Đó là khá một API linh hoạt, do đó bạn có thể rất cụ thể nếu bạn cần phải:

$("form") 
    .off("keypress.validator", "input[type='text']", validate) 
    .on("keypress.validator", "input[type='text']", validate); 

Các tài liệu: http://api.jquery.com/off/

0
function demo() 
{ 
// your code here which will called on click event 
} 

$(document).ready(function(){ 
$('.add').bind('click',demo); 

}); 

//After successfully ajax call response 
//Unbind the click event first 
$('.add').unbind('click',demo); 
//Then again bind the event 
$('.add').bind('click',demo); 
0

giải pháp đơn giản nhất từ ​​đây bind event only once

mẫu mã được sao chép:

function someMethod() 
{ 
    $(obj).off('click').on('click', function(e) { 
     // put your logic in here 
    }); 
} 
Các vấn đề liên quan