J'en ai un input type="image"
. Cela agit comme les notes de cellule dans Microsoft Excel. Si quelqu'un entre un nombre dans la zone de texte avec laquelle il input-image
est associé, je configure un gestionnaire d'événements pour le input-image
. Ensuite, lorsque l'utilisateur clique sur image
, il obtient une petite fenêtre contextuelle pour ajouter des notes aux données.
Mon problème est que lorsqu'un utilisateur entre un zéro dans la zone de texte, je dois désactiver le input-image
gestionnaire d'événements de. J'ai essayé ce qui suit, mais en vain.
$('#myimage').click(function { return false; });
la source
unbind()
fonctionne? Je l'ai ajouté et les deux événements se déclenchent toujours.$('#myimage').off('click').on('click',function(){...})
.unbind()
m'a aidé dans une situation où je basculais un tas de cases à cocher, mais relâché, je rajoutais le.click()
gestionnaire à plusieurs reprises, provoquant le blocage de l'application.Ce n'était pas disponible lorsque cette question a été répondue, mais vous pouvez également utiliser la méthode live () pour activer / désactiver les événements.
Ce qui se passera avec ce code, c'est que lorsque vous cliquez sur #mydisablebutton, il ajoutera la classe désactivée à l'élément #myimage. Cela fera en sorte que le sélecteur ne correspondra plus à l'élément et que l'événement ne sera pas déclenché jusqu'à ce que la classe «désactivé» soit supprimée, ce qui rend le sélecteur .live () à nouveau valide.
Cela présente d'autres avantages en ajoutant également un style basé sur cette classe.
la source
live()
, jamais pensé à l'utiliser de cette façon auparavant ... Mis à part la commodité du codage, est-ce plus rapide ou offre-t-il d'autres avantages à l'utilisation de bind / unbind?Si vous souhaitez répondre à un événement une seule fois , la syntaxe suivante devrait être très utile:
En utilisant arguments.callee , nous pouvons nous assurer que le gestionnaire de fonction anonyme spécifique est supprimé, et donc avoir un gestionnaire de temps unique pour un événement donné. J'espère que cela aide les autres.
la source
Cela peut être fait en utilisant la fonction de dissociation.
Vous pouvez ajouter plusieurs gestionnaires d'événements au même objet et événement dans jquery. Cela signifie que l'ajout d'un nouveau ne remplace pas les anciens.
Il existe plusieurs stratégies pour modifier les gestionnaires d'événements, tels que les espaces de noms d'événements. Il y a quelques pages à ce sujet dans les documents en ligne.
Regardez cette question (c'est comme ça que j'ai appris à délier). Il y a une description utile de ces stratégies dans les réponses.
Comment lire les fonctions de rappel hover liées dans jquery
la source
peut-être que la méthode de déliaison fonctionnera pour vous
la source
J'ai dû mettre l'événement à zéro en utilisant l'accessoire et l'attr. Je ne pouvais pas le faire avec l'un ou l'autre. Je ne pouvais pas non plus faire fonctionner .unbind. Je travaille sur un élément TD.
la source
$("#elementId").click(function(){//Event execution code goes here});
pour qu'il ne soit pas du tout dans la page html. Pour effacer que nous devons réellement utiliser.unbind()
, ou le préféré.off()
unbind
etoff
ça n'a pas résolu le problème. Merci beaucoup!Si l'événement est attaché de cette façon et que la cible doit être détachée:
la source
Vous pouvez ajouter le
onclick
gestionnaire en tant que balisage en ligne:Si c'est le cas, le jquery
.off()
ou.unbind()
ne fonctionnera pas. Vous devez également ajouter le gestionnaire d'événements d'origine dans jquery:Ensuite, le jquery a une référence au gestionnaire d'événements et peut le supprimer:
VoidKing le mentionne un peu plus indirectement dans un commentaire ci-dessus.
la source
Mise à jour pour 2014
À l'aide de la dernière version de jQuery, vous pouvez désormais dissocier tous les événements d'un espace de noms en faisant simplement
$( "#foo" ).off( ".myNamespace" );
la source
La meilleure façon de supprimer un événement onclick en ligne est
$(element).prop('onclick', null);
la source
Pour
remove
TOUSevent-handlers
, c'est ce qui a fonctionné pour moi:Supprimer tous les gestionnaires d'événements signifie avoir la plaine
HTML structure
sans tous lesevent handlers
attachés à laelement
et à la siennechild nodes
. Pour ce faire,jQuery's clone()
aidé.Avec cela, nous aurons le
clone
à la place duoriginal
sansevent-handlers
.Bonne chance...
la source
Merci pour l'information. très utile je l'ai utilisé pour verrouiller l'interaction de la page en mode édition par un autre utilisateur. Je l'ai utilisé en conjonction avec ajaxComplete. Pas nécessairement le même comportement mais quelque peu similaire.
la source
Dans le cas où la
.on()
méthode était précédemment utilisée avec un sélecteur particulier, comme dans l'exemple suivant:Les deux
unbind()
et les.off()
méthodes ne sont pas aller au travail.Cependant, la méthode .undelegate () peut être utilisée pour supprimer complètement le gestionnaire de l'événement pour tous les éléments qui correspondent au sélecteur actuel:
la source
Si vous utilisez
$(document).on()
pour ajouter un écouteur à un élément créé dynamiquement, vous devrez peut-être utiliser ce qui suit pour le supprimer:la source
Cela fonctionne également très bien. Simple et facile. Voir http://jsfiddle.net/uZc8w/570/
la source
si vous définissez la
onclick
via,html
vous devezremoveAttr ($(this).removeAttr('onclick'))
si vous le définissez via jquery (comme après le premier clic dans mes exemples ci-dessus), vous devez
unbind($(this).unbind('click'))
la source
Je sais que cela arrive tard, mais pourquoi ne pas utiliser JS simple pour supprimer l'événement?
ou, si vous utilisez une fonction nommée comme gestionnaire d'événements:
la source
Toutes les approches décrites n'ont pas fonctionné pour moi car j'ajoutais l'événement click avec
on()
au document où l'élément a été créé au moment de l'exécution:Ma solution:
Comme je ne pouvais pas dissocier la classe ".button", je viens d'assigner une autre classe au bouton qui avait les mêmes styles CSS. Ce faisant, le gestionnaire live / on-event a finalement ignoré le clic:
J'espère que cela pourra aider.
la source
J'espère que mon code ci-dessous explique tout. HTML:
la source
})(jQuery);
dans l'IIFE alors qu'il est déjà accessible à l'échelle mondiale?Supprimez simplement cela du bouton:
la source