Как переписать обработчики событий jquery - PullRequest
71 голосов
/ 12 апреля 2009

Я попытаюсь объяснить проблему простым кодом.

var fireClick = function() { alert('Wuala!!!') };

$('#clickme').click(fireclick);
$('#clickme').click(fireclick);

Так что теперь он, очевидно, будет предупрежден 2 раза, но мне нужно, чтобы он предупреждался только один раз. Перепробовал так много способов, но безрезультатно.

Спасибо.

Ответы [ 5 ]

128 голосов
/ 12 апреля 2009

Начиная с jQuery 1.7, вы должны использовать off для удаления обработчиков событий и на для их добавления, хотя вы все еще можете использовать сокращение click.

$('#clickme').off('click').on('click', fireclick);
$('#clickme').off().on('click', fireclick);

Оригинальный ответ:

Если вы хотите заменить все обработчики кликов, сначала вызовите unbind без аргумента функции. Если вы хотите заменить все обработчики событий, не указывайте тип события.

$('#clickme').unbind('click').click(fireclick);
$('#clickme').unbind().click(fireclick);
22 голосов
/ 22 октября 2014

Используйте пространство имен, чтобы убедиться, что вы не удаляете других слушателей:

$('#clickme').off('click.XXX').on('click.XXX', fireclick);

Пока никакой другой код не использует XXX, вы можете быть уверены, что не ошиблись каким-либо другим поведением, о котором вы не знали.

18 голосов
/ 12 апреля 2009

Вы можете использовать функцию jQuery unbind , чтобы удалить первое событие:

var fireClick = function() { alert('Wuala!!!') };

$('#clickme').click(fireclick);
$('#clickme').unbind('click', fireClick); // fireClick won't fire anymore...
$('#clickme').click(fireclick); // ...but now it will
3 голосов
/ 12 апреля 2009

Я бы попытался исключить дополнительные вызовы, но если не считать, что вы могли бы обязательно вызывать оба из них каждый раз:

$('#clickme').unbind('click', fireclick);
$('#clickme').click(fireclick);
0 голосов
/ 09 марта 2012

Вы должны использовать setInterval. Проблема в том, что у вас не может быть двух предупреждений одновременно. Первый должен закрыться первым или второй не может появиться на экране ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...