Je cherchais une solution comme celle-ci qui déclencherait sans que l'utilisateur ait besoin de quitter l'élément, mais qui fonctionnerait dans tous les cas, y compris ceux identifiés par Jakub dans son article. C'est à dire.
- saisie normale
- collage via la souris
- Autocomplete
Je idéalement voulais une solution jQuery que j'utilisais différents sélecteurs de jQuery etc et ne voulait pas les tracas de "déballer" mes objets jQuery pour accéder à l'élément DOM.
Je suis allé pour une solution en utilisant trois cas différents déclencheurs - voir les commentaires dans l'exemple de code ci-dessous pour pourquoi:
var valuechanged = function() {
// do something
};
var inputtowatch = $('.selector');
inputtowatch.on('input', valuechanged);
inputtowatch.on('keyup', valuechanged); // input event is buggy and doesn't catch delete/backspace in IE, but can't just use keyup alone as that doesn't catch paste and automcomplete
inputtowatch.on('propertychange', valuechanged); // input event not supported in IE < 9
Je m'y attendais en utilisant plusieurs événements comme celui-ci pourrait entraîner la fonction d'être tiré à plusieurs reprises . Dans mes tests dans Firebug, cela ne s'est pas produit. Cependant, j'étais dans la position chanceuse de ne pas savoir si la fonction fonctionnait "trop" fois et donc n'a pas testé cet aspect particulier plus loin (par exemple d'autres navigateurs).
Voir [$ ("# some-input") .changePolling()] (https://gist.github.com/2944926); pour un wrapper qui vérifie la valeur actuelle et déclenche '.change()' s'il a changé. –