J'ai deux fonctions liées à un événement de clic à deux moments différents (en utilisant jQuery). L'ordre dans lequel ils sont tirés est important. Ils tirent dans le bon ordre. Le problème est que lorsque la première fonction retourne false, la deuxième fonction est toujours en cours de déclenchement!
Comment puis-je annuler correctement l'événement?
Exemple de code:
$(document).click(function() {
alert('a');
return false;
});
$(document).click(function() {
alert('b');
});
Vous verrez toujours le message d'alerte "b" lorsque vous cliquez sur la page. C'est inacceptable!
Utilisez la fonction stopImmediatePropagation
de l'objet d'événement jQuery.
Empêche le reste des gestionnaires d'être exécutés. Cette méthode arrête également le bouillonnement en appelant event.stopPropagation ().
$(document).click(function(event) {
alert('a');
event.stopImmediatePropagation();
return false;
});
$(document).click(function() {
alert('b');
});
Merci, unbind fonctionne pour redéfinir les fonctions.
$(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'); });
}
}
})
La première chose que je demande est: pourquoi avez-vous des fonctions deux liées au même événement de clic? Ayant accès au code, pourquoi ne faites-vous pas qu'un seul appel?
$(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);
}
});
});
Est-ce que l'aide de la dissociation aide?
$(document).click(function() {
alert('a');
$(this).unbind('click');
return false;
});
Si ce que nickf a dit ne fonctionne pas, vous pouvez utiliser une petite machine d'état:
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;
});
Pas la plus jolie solution, mais ça marchera.