JQuery Несколько обработчиков событий - как отменить?
У меня есть две функции, связанные с событием click в два разных раза (с использованием jQuery). Порядок их увольнения является значительным. Они стреляют в правильном порядке. Проблема в том, что когда первая функция возвращает false, вторая функция все еще срабатывает!
Как я могу правильно отменить событие?
Пример кода:
$(document).click(function() {
alert('a');
return false;
});
$(document).click(function() {
alert('b');
});
При щелчке по странице вы все равно увидите предупреждающее сообщение "b". Это неприемлемо!
Ответы
Ответ 1
Используйте функцию stopImmediatePropagation
объекта события jQuery.
Сохраняет выполнение остальных обработчиков. Этот метод также останавливает пузырьки, вызывая event.stopPropagation().
$(document).click(function(event) {
alert('a');
event.stopImmediatePropagation();
return false;
});
$(document).click(function() {
alert('b');
});
Ответ 2
В первую очередь я спрашиваю: почему у вас есть две функции, связанные с одним и тем же событием клика? Имея доступ к коду, почему бы вам просто не сделать один единственный звонок?
$(function (){
var callbackOne = function(e){
alert("I'm the first callback... Warning, I might return false!");
return false;
};
var callbackTwo = function(e){
alert("I'm the second callback");
};
$(document).click(function (e){
if(callbackOne(e)){
callbackTwo(e);
}
});
});
Ответ 3
Спасибо, unbind работает для переопределения функций.
$(document).ready(function(){
$("#buscar_mercaderia").click(function(){ alert('Seleccione Tipo de mercaderia');
});
$(".tipo").live('click',function(){
if($(this).attr('checked')!=''){
if($(this).val()=='libro'){
$("#buscar_mercaderia").unbind('click');
$("#buscar_mercaderia").click(function(){ window.open('buscar_libro.php','Buscar Libros', 'width=800,height=500'); });
}else if($(this).val()=='otra'){
$("#buscar_mercaderia").unbind('click');
$("#buscar_mercaderia").click(function(){ window.open('buscar_mercaderia.php','Buscar Mercaderias', 'width=800,height=500'); });
}
}
})
Ответ 4
Использует ли помощь unbind?
$(document).click(function() {
alert('a');
$(this).unbind('click');
return false;
});
Ответ 5
Если какой ник сказал не работает, вы можете использовать небольшой конечный автомат:
var trigger = 0;
$(document).click(function() {
alert('a');
if(you_want_to_return_false) {
trigger = 1;
return false;
}
});
$(document).click(function() {
if(trigger !== 0) {
alert('b');
}
trigger = 0;
});
Не самое приятное решение, но оно будет работать.