Я попытаюсь объяснить проблему простым кодом.
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. Проблема в том, что вы не можете одновременно получать два предупреждения. Сначала нужно закрыть первый или второй, который не может появиться на экране...