Как перезаписать обработчики событий jquery

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

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

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

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

Спасибо.

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

Вы можете использовать функцию 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

Ответ 4

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

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

Ответ 5

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