BR0kEN-/jTap

undelegate

egorogl opened this issue · 3 comments

Я вешаю событие tap
$('body').delegate('.right', 'tap', fun);

как сделать undelegate ?

У меня сайт с ajax подгрузкой страниц и скриптов.

$('body').undelegate('.right', 'tap');
$('body').delegate('.right', 'tap', fun);
$('body').undelegate('.right', 'tap');
$('body').delegate('.right', 'tap', fun);

fun вызовет 2 раза

The next code is works fine, but it doesn't correct.

$('body').delegate('#element', 'tap', function() {
  console.log(this);
});

$('body').undelegate('#element', 'tap');

You should delegate your events to document and, in this way, undelegation is unnecessary.

$(document).on('tap', '#element', function() {
  console.log(this);
});

$(document).off('tap', '#element');

Also, if the "tap" event fires more times than you need, you should debug your events nesting level or make refactor of your JS code.

Documentation links:
.on(), .off(), .delegate(), .undelegate().

PS:
Which version of jQuery you uses?

Версия jquery-1.10.2

$(document).on('tap', '.right', fun);
$(document).off('tap', '.right');

Вот так отключает событие

$(document).on('tap', '.right', fun);
$(document).off('tap', '.right');
$(document).on('tap', '.right', fun);

А вот так, уже 2 раза вызывает. Я уже понял, что это не в плагине проблема. Не подскажете, как очищать предыдущие функции?

An issue was fixed.