Я прикрепил делегированные обработчики событий к ряду элементов на странице с помощью одного селектора. Поскольку события запускаются для отдельных элементов, я хотел бы отключить только обработчик событий этого элемента, на основе некоторой условной логики. Это означает, что я не обязательно буду отключать событие при первом нажатии. Но я не могу понять, как это сделать, не выключая их все.
HTML:
<button>One</button>
<button>Two</button>
<button>Three</button>
JS:
$(document).on('click', 'button', function(ev) {
// doesn't work because argument needs to be a string
$(document).off('click', $(ev.target));
// doesn't do what I want b/c turns off events on all buttons, not just this one
$(document).off('click', 'button');
// doesn't work because event is on document, not button
$(ev.target).off('click');
});
off документация говорит, что мне нужно предоставить строку в качестве второго аргумента, не объект jQuery ($(ev.target)
), но если я укажу строку, не будет значения, относящегося только к элементу, по которому щелкнули.
Из документации по jQuery:
Чтобы удалить определенные делегированные обработчики событий, укажите аргумент селектора. Строка селектора должна точно совпадать с той, что была передана в .on() при подключении обработчика событий. Чтобы удалить все делегированные события из элемента, не удаляя неделегированные события, используйте специальное значение «**».
Так как же отключить делегированный обработчик событий для определенного элемента?
Вот JSFiddle приведенного выше кода
ОБНОВЛЕНИЕ: добавлено несколько примеров вариантов, которые не работают на основе первоначальных ответов.
ev.target
в качестве второго аргумента? - person lshettyl   schedule 28.05.2015