2009-06-09 15 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'); 
    } 
) 

In diesem Fall habe ich doppelten Code aufgerufen. Wie erkenne ich, ob das Ereignis gebunden wurde, um zu verhindern, dass es zwei Alarmfelder auslöst?So verhindern Sie, dass Ereignisse mehrfach gebunden werden

Antwort

22

Es gibt einen wirklich guten Weg, dies in jQuery zu tun.

Hier ist ein Beispiel.

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); 

Diese Methode wird nur das von Ihnen angegebene Ereignis entfernen, wodurch es ideal für das ist, was Sie tun möchten.

+0

Wie kann man die Klickargumente e damit übergeben? Kann ich $ (". Ajax") gehen. Bind ("click", alertEvent (e)); ? –

+0

Definieren Sie die Funktion als "function alertEvent (e)", um das Ereignisargument abzurufen. – mcrumley

6

versuchen unbinding es vor der Bindung:

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

this für einige weitere Informationen lesen.

+0

Dadurch werden alle Click-Ereignisse entbinden, nicht nur das angegebene Ereignis. Ich habe ein Beispiel hinzugefügt, das nur das Ereignis löst, das du nicht duplizieren willst, was bedeutet, dass andere Ereignisse weiterhin ausgelöst werden. – Fenton

15

Wenn Sie jQuery> = 1.7 verwenden, können Sie die API .on()/.off() in Verbindung mit einem Ereignisnamespace verwenden. In diesem Beispiel wird .off() sofort aufgerufen Vorveranstaltungen um sicherzustellen, (jeglicher Art) mit dem Namespace ungebundene:

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

Es ist eine recht flexible API, so dass Sie sehr spezifisch sein können, wenn Sie sein müssen:

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

Die docs: 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

Simplest Lösung von hier bind event only once

Kopierte Codebeispiel:

function someMethod() 
{ 
    $(obj).off('click').on('click', function(e) { 
     // put your logic in here 
    }); 
} 
Verwandte Themen