w3schools - jquery set onchange




jQuery Gestori di eventi multipli-Come annullare? (4)

Ho due funzioni legate a un evento click in due momenti diversi (usando jQuery). L'ordine in cui vengono licenziati è significativo. Stanno sparando nell'ordine corretto. Il problema è che quando la prima funzione restituisce false, la seconda funzione continua a sparare!

Come posso cancellare correttamente l'evento?

Codice di esempio:

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

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

Verrà comunque visualizzato il messaggio di avviso "b" quando si fa clic sulla pagina. Questo è inaccettabile!


Usa l'aiuto di unbind?

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

Se quello che ha detto nickf non funziona, potresti usare una piccola macchina a stati:

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;
});

Non è la soluzione più carina, ma funzionerà.


La prima cosa che chiedo è: perché hai due funzioni legate allo stesso evento click? Avendo accesso al codice, perché non fai una sola chiamata?

$(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);
        }
    });
});

Utilizzare la funzione stopImmediatePropagation dell'oggetto evento jQuery.

Mantiene il resto degli handler da eseguire. Questo metodo blocca anche il bubbling chiamando event.stopPropagation ().

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

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




event-handling