J'ai trouvé que l'événement de changement jQuery sur une zone de texte ne se déclenche pas tant que je ne clique pas en dehors de la zone de texte.
HTML:
<input type="text" id="textbox" />
JS:
$("#textbox").change(function() {alert("Change detected!");});
Voir la démo sur JSFiddle
Mon application nécessite que l'événement soit déclenché à chaque changement de caractère dans la zone de texte. J'ai même essayé d'utiliser keyup à la place ...
$("#textbox").keyup(function() {alert("Keyup detected!");});
... mais c'est un fait connu que l'événement keyup n'est pas déclenché par un clic droit et coller.
Une solution de contournement? Est-ce que le fait d'avoir les deux auditeurs va poser des problèmes?
Réponses:
Lier les deux événements est la manière typique de le faire. Vous pouvez également vous lier à l'événement de collage.
Vous pouvez vous lier à plusieurs événements comme celui-ci:
Si vous voulez être pédant à ce sujet, vous devez également vous lier à mouseup pour permettre de faire glisser du texte et ajouter une
lastValue
variable pour vous assurer que le texte a réellement changé:Et si vous voulez être
super duper
pédant, vous devez utiliser une minuterie d'intervalle pour prendre en charge le remplissage automatique, les plugins, etc.la source
.on('change keyup paste', function() {...}
tire en fait plusieurs fois! Si j'ai tapé un caractère, puis cliqué à l'extérieur, les événements 'change' et 'keyup' sont tous deux déclenchés, ce qui entraîne l'exécution de la fonction plusieurs fois! Si j'ai cliqué avec le bouton droit de la souris, puis cliqué à l'extérieur, «modifier» et «coller» sont tous deux déclenchés. Zut! En utilisant Ctrl + V pour coller, puis en cliquant à l'extérieur, il déclenche trois fois !!lastValue
variable pour vous assurer qu'elle a réellement changé.Sur les navigateurs modernes, vous pouvez utiliser l'
input
événement :DEMO
la source
Cela fonctionne pour taper, coller, coller avec le bouton droit de la souris, etc.
la source
HTML:
JS:
la source
Essaye ça:
Voir la démo sur JSFiddle .
la source
bind()
?keyup
et qu'ilchange()
a son propre comportement typique, donc il veut exécuter l'événement alorspaste
pourrait être l'optionbind
au lieu deon
.Essayez le code ci-dessous:
la source
event to be fired on every character change in the textbox
"...but it's a known fact that the keyup event isn't fired on right-click-and-paste."
La lecture de vos commentaires m'a amené à une mauvaise solution. Ce n'est pas une bonne façon, je le sais, mais cela peut être une solution.
la source