2009-10-13 6 views

Répondre

34

Vous pouvez délie l'événement de clic avant de le lier à nouveau, de cette façon vous n'avez un événement qui lui:

//assuming this is a jquery object. 
this.unbind("click"); 
this.click(function(){ 
    alert("clicked once"); 
}); 

À partir de jQuery 1.7, cliquez utilise maintenant .on (http://api.jquery.com/click/) de sorte que le bon code est maintenant

//assuming this is a jquery object. 
this.off("click"); 
this.click(function(){ 
    alert("clicked once"); 
}); 

Cela délie tous les événements de clic (y compris ceux créés par les plug-ins que vous utilisez peut-être). Pour vous assurer que vous ne déliez que votre événement, utilisez des espaces de noms. (http://api.jquery.com/off/)

//assuming this is a jquery object. 
this.off("click.myApp"); 
this.on("click.myApp", function(){ 
    alert("clicked once"); 
}); 

Ici myApp est l'espace de noms.

+0

Parfait, fait exactement ce que je veux . Merci! – Roger

9

Je voudrais ajouter à réponse--

Marius En évitant les liaisons en double vous ne voulez pas accidentellement délie quelque chose s'il est censé être plus d'une fonction liée à un événement. Ceci est particulièrement important lorsque vous travaillez sur quelque chose avec plusieurs développeurs. Pour éviter cela, vous pouvez utiliser événement espaces de noms:

//assuming this is a jquery object. 
var alertEvent = 'click.alert' 
this.unbind(alertEvent).bind(alertEvent,function(){ 
    alert('clicked once'); 
}); 

Voici alerte »est le nom de l'espace de noms pour votre événement de clic et uniquement les fonctions qui ont été liés avec cet espace sera non lié.

15

Avec jQuery .on() vous pouvez faire quelque chose comme ça:

//removes all binding to click for the namespace "myNamespace" 
$(document).off('click.myNamespace'); 

$(document).on('click.myNamespace', '.selector', function(event) {...}); 

//this will be also removed (same namespace) 
$(document).on('click.myNamespace', '.anotherSelector', function(event) {...}); 
+1

Merci pour cette réponse, sieppl. Vérifiez simplement la documentation de jQuery et elle indique: 'À partir de jQuery 1.7, la méthode .on() est la méthode préférée pour attacher des gestionnaires d'événements à un document. Pour les versions antérieures, la méthode .bind() est utilisée pour attacher un gestionnaire d'événements directement aux éléments. Les gestionnaires sont attachés aux éléments actuellement sélectionnés dans l'objet jQuery, de sorte que ces éléments doivent exister au moment où l'appel à .bind() se produit. Pour une liaison d'événements plus flexible, voir la discussion sur la délégation d'événements dans .on() ou .delegate(). ' Ma conclusion: pour la plupart des cas, c'est mieux que .bind() –

+0

@esco_: Oui, je suis passé à () complètement. Je n'ai jamais utilisé bind() mais j'ai arrêté d'utiliser live() et delegate(). – sieppl

0

en supposant que les éléments sont ajoutés au code HTML et que vous voulez ajouter un événement uniquement pour les éléments ajoutés:

function addEvents2Elements()//prevent Duplicate 
{ 
    //this will add the event to all elements of class="ele2addevent" 
    $('.ele2addevent').not('.clickbind').on('click',function(){alert('once');}) 

    //this will add a class an then the class="ele2addevent clickbind" 
    $('.ele2addevent').not('.clickbind').addClass('.clickbind'); 
    //all elements of class="... clickbind" will not be catched anymore in the first line because of .not() every time you call this function 
} 
addEvents2Elements(); 

être shure que vous ajoutez seulement avec le class = "ele2addevent", car après le bind il sera class = "ele2addevent clickbind" et ne sera pas attrapé à nouveau ...

Questions connexes