Подтвердить что ты не робот

JQuery Несколько обработчиков событий - как отменить?

У меня есть две функции, связанные с событием click в два разных раза (с использованием jQuery). Порядок их увольнения является значительным. Они стреляют в правильном порядке. Проблема в том, что когда первая функция возвращает false, вторая функция все еще срабатывает!

Как я могу правильно отменить событие?

Пример кода:

$(document).click(function() { 
  alert('a');
  return false;
});

$(document).click(function() {
  alert('b');
});

При щелчке по странице вы все равно увидите предупреждающее сообщение "b". Это неприемлемо!

4b9b3361

Ответ 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;
});

Не самое приятное решение, но оно будет работать.