J'essaie de déclencher l' change
événement sur une zone de texte lorsque je modifie sa valeur avec un bouton, mais cela ne fonctionne pas. Vérifiez ce violon .
Si vous tapez quelque chose dans les zones de texte et cliquez ailleurs, change
est déclenché. Cependant, si vous cliquez sur le bouton, la valeur de la zone de texte est modifiée, mais change
ne se déclenche pas. Pourquoi?
Réponses:
onchange
ne se déclenche que lorsque l'utilisateur tape dans l'entrée, puis que l'entrée perd le focus.Vous pouvez appeler manuellement l'
onchange
événement en utilisant après avoir défini la valeur:Alternativement, vous pouvez déclencher l'événement en utilisant:
la source
.change()
à la.val()
méthode..val()
à.change()
parce qu'ils font la validation d' entrée. Déclencher.change()
dessus.val()
entraînerait une boucle infinie.blur
à accomplir quelque chose de similaire:$('#mytext').focus().val('New text').blur();
D'après l'excellente suggestion de redsquare, cela fonctionne bien:
la source
this
:return this.val(v).trigger("change");
Vous pouvez très facilement remplacer la
val
fonction pour déclencher le changement en la remplaçant par un proxy de laval
fonction d' origine .il suffit d'ajouter ce code quelque part dans votre document (après le chargement de jQuery)
Un exemple concret : ici
(Notez que cela se déclenchera toujours
change
lorsqueval(new_val)
est appelé même si la valeur n'a pas réellement changé.)Si vous souhaitez déclencher le changement UNIQUEMENT lorsque la valeur a réellement changé, utilisez celui-ci:
Exemple en direct pour cela: http://jsfiddle.net/5fSmx/1/
la source
.val()
..val()
esprit commencerait soudainement à produire des effets secondaires :-p.Vous devez enchaîner la méthode comme ceci:
la source
Non, vous devrez peut-être le déclencher manuellement après avoir défini la valeur:
ou:
la source
Il semble que les événements ne bouillonnent pas. Essaye ça:
J'espère que ça aide.
J'ai essayé un simple vieux
$("#mytext").trigger('change')
sans sauvegarder l'ancienne valeur, et les.change
incendies même si la valeur n'a pas changé. C'est pourquoi j'ai enregistré la valeur précédente et appelé$("#mytext").trigger('change')
uniquement si elle change.la source
À partir de février 2019, il
.addEventListener()
ne fonctionne pas actuellement avec jQuery.trigger()
ou.change()
, vous pouvez le tester ci-dessous en utilisant Chrome ou Firefox.vous devez utiliser à la
.dispatchEvent()
place.la source
Depuis https://api.jquery.com/change/ :
L'
change
événement est envoyé à un élément lorsque sa valeur change. Cet événement est limité aux<input>
éléments,<textarea>
boîtes et<select>
éléments. Pour les cases de sélection, les cases à cocher et les boutons radio, l'événement est déclenché immédiatement lorsque l'utilisateur effectue une sélection avec la souris, mais pour les autres types d'élément, l'événement est différé jusqu'à ce que l'élément perd le focus.la source
Je sais que c'est un vieux fil de discussion, mais pour ceux qui recherchent, les solutions ci-dessus ne sont peut-être pas aussi bonnes que les suivantes, au lieu de vérifier les
change
événements, vérifiez lesinput
événements.la source