Pourquoi le javascript événement onchange ne pas se déclencher si la saisie semi-automatique est sur?
J'ai une zone de texte avec un événement onchange. Pourquoi cet événement se déclenche pas lorsque l'utilisateur utilise la fonctionnalité saisie semi-automatique pour remplir la zone de texte?
Je travaille avec Internet Explorer. Est-il un standard et solution relativement simple pour contourner ce problème, sans avoir à me désactiver la saisie semi-automatique?
Vous devez vous connecter pour publier un commentaire.
Dernière fois que j'ai eu ce problème, j'ai fini par utiliser la
onpropertychange
événement pour Internet Explorer à la place. J'ai lu que ici sur MSDN: il est recommandé de l'obtenir autour d'elle.J'ai rencontré cette particularité gênante avant et ma solution est d'utiliser l'événement onfocus pour enregistrer la valeur actuelle de la zone de texte, puis utilisez l'événement onblur pour vérifier si la valeur actuelle correspond maintenant à la valeur enregistrée au cours de onfocus. Par exemple
onblur
fixé mon problème.$("#my-field").focus(function(){this.originalvalue=this.value}).blur(function(){if (this.value != this.originalvalue) alert('changed')});
Bâtiment sur Tim C de la réponse, voici le simple jquery je suis venu avec de gérer cela pour toutes les zones de texte sur une page:
Si vous n'avez pas de soins sur onchange de tir à plusieurs reprises, vous pouvez faire plus simple:
J'ai juste trouvé que à l'aide de jQuery 1.4 pour définir l'événement de changement de peut résoudre ce problème. Il semble que la méthode la plus simple solution de ce problème si vous êtes déjà familier avec jQuery.
- Je activer la saisie semi-automatique off pour les zones de texte j'ai besoin de tirer un texte d'événement de changement de
Juste mis dans le chargement de la page.
Alternativement, vous pouvez ajouter l'attribut à votre balise sur le
input
de l'élément ou de l'ensemble de laform
:ou
J'ai trouvé que la suite de jQuery (v1.10+) JavaScript fonctionne dans le cas du texte en cours de remplissage automatique pour HTML champs de saisie de texte. Cela a été testé pour fonctionner de manière fiable au moins dans Safari 6.1.1 sur Mac OS X 10.8.5, mais devrait fonctionner dans d'autres compatible navigateurs:
Il semblait le plus de la
blur
gestionnaire d'événement a été la clé pour faire ce travail, même si les autres gestionnaires d'événements aider à s'assurer que le gestionnaire d'événements est appelée à tout moment de la modification du texte, que ce soit en raison d'une modification ou nouvelle entrée par le navigateur de la fonctionnalité d'auto-complétion.Il suffit de remplacer le
"input:text[id=text_field_id]"
code ci-dessus avec le sélecteur pour sélectionner votre champ de saisie de texte, ou si à l'aide de laid
attribut de vous référer à votre domaine, remplacertext_field_id
avec votre champ de texteid
valeur de l'attribut.