2014-03-06 46 views
7

Ich möchte einen Ereignishandler entfernen, wenn ein Ereignis ausgelöst wird. Ich kann one() nicht verwenden, da es Fälle gibt, in denen ich den Ereignishandler nicht entfernen möchte. Hier ist, was ich meine:Aktuellen Ereignishandler in JQuery entfernen?

$('#a').on('click',function(){ 
    if(...) 
    // remove current event handler 
}); 

Edit: Ich vergaß zu erwähnen, dass es andere Event-Handler $('#a') angebracht. Ich möchte nur die aktuelle entfernen.

+0

versuchen, die gleiche Frage in google – sanjeev

Antwort

20

Verwenden .off(), mit Namen voneinander event names

$('#a').on('click.myevent', function() { 
    if (...) 
    // remove current event handler 
    $(this).off('click.myevent') 
}); 
+0

was ist 'click.myevent'. Bitte verlinke mich zu einem Link, der beschreibt, dass ... –

+1

@RajaprabhuAravindasamy es ist [Namespaced Event-Namen] (http://api.jquery.com/on/#event-names) - verwendet, um sicherzustellen, dass wir es nicht tun anderen Klick-Event-Handler freigeben –

+0

Dadurch werden alle Ereignisse mit diesem Namespace entfernt. Das bedeutet, dass "myevent" ein eindeutiger Bezeichner sein muss. –

-1

Können Sie bitte versuchen Sie dies:

$('#a').on('click',function(){ 
    if(...) 
    { 

    $(this).unbind('click'); or $(this).off('click') 
}  

}); 

Bind und unbind sind für die Abwärtskompatibilität. Sie sollten on/off Event-Handler

hoffe, das hilft ..

+2

Dies wird alle 'click' Event-Handler entfernen. OP möchte nur einen bestimmten Handler entfernen. – toxalot

6

Um einen Event-Handler in sich selbst zu lösen zu lösen oder befestigen:

$("#a").on("click", function(evt){ 
    if (...) 
    { 
     $(this).off(evt); 
    } 
}); 

Es ist nicht sehr gut dokumentiert in .off(), aber Sie können eine bessere Erklärung dieses "dritten Formulars" aus dem Abschnitt "Verwenden des Ereignisobjekts" in .unbind() lesen.

Verwandte Themen