2016-07-09 22 views
0

Ich habe eine Tabelle, wo ich alle meine Elemente mit class = "shift" an eine Klick-Funktion gebunden habe.Jquery off() für ein bestimmtes Element

Jetzt, da ich auch ein anderes click -Ereignis auf einen Teil des Elements verwenden muss, möchte ich das click -Ereignis auf Element lösen, wenn die Maus das Element betritt und neu bindet, wenn ich gehe (gemeint für einige Berührungsereignisse und was nicht Now)

binde ich wie dieses

$("table").on("touchstart mousedown",".shift", function(e){ ... }) 

Aber wenn ich versuche, auf ein bestimmtes Element zu lösen, sagen, es ist eine Klasse hat = "selected" hinzugefügt, um das aktuelle Element zu unterscheiden i verwenden:

$("table").off("touchstart mousedown",".shift.selected") 

was nicht funktioniert ....

Ich kann alle Handler auf einmal entfernen, aber es wäre verschwenderisch, alle Handler zu entfernen und sie wieder einzufügen, sobald die Maus geht.

Gibt es also eine Möglichkeit, den Handler für ein einzelnes Element zu entfernen, nachdem das Ereignis an alle aktuellen und zukünftigen Elemente gebunden ist?

Vielen Dank im Voraus!

+0

Kann $ '(" table ") nicht verwenden on (" touchstart mousedown ",". Shift: nicht (.selected) ", function (e) {...})'? –

+0

Sie können die Bindung nicht allein von '.shift.selected' lösen, da nichts wirklich an ein' .shift' Element gebunden ist. Es gibt nur einen Handler gebunden, und zwar 'table', und er hat eine Anweisung, den Handler auszulösen, wenn das Ereignis auf' .shift' stattfindet, so dass die Aufhebung von '.shift.selected' keine Auswirkungen hat, da Sie sie nicht benutzt haben dieser Selektor. –

+0

Leider wird die .selected Klasse nur hinzugefügt, wenn die Maus das Element betritt. Das Element ist nicht diese Klasse, wenn das Ereignis gebunden ist Ich dachte nicht, dass es auch möglich war, aber ich musste fragen, nur für den Fall, dass jemand einen Weg gefunden hatte, ein einzelnes Element zu lösen –

Antwort

0

Sie müssen das Klickereignis für das Element nicht lösen, wenn die Maus eindringt. Ich weiß, dass das Klickereignis des Elements ausgelöst wird, wenn Sie auf ein inneres Element mit dem Klickereignis klicken, richtig? Sie können aufhören, dass:

Der Click-Handler des inneren Elements wie folgt aussehen muss:

$("some inner element").click(function(event) { 
    //That's what are you looking for ;) 
    event.stopPropagation(); 
    //You code here 
}); 
von

event.stopPropagation() wird verhindert, dass das Ereignis aus sprudelnden den DOM-Baum nach oben und verhindert jegliche Mutter Handler des Ereignisses informiert zu werden .

Verwandte Themen