jQuery 'input' événement
Je n'ai jamais entendu parler d'un événement en jQuery appelé input
jusqu'j'ai vu ce jsfiddle.
Savez-vous pourquoi cela fonctionne? Est-il un alias pour keyup
ou quelque chose?
$(document).on('input', 'input:text', function() {});
- C'est pas un alias de
keyup
.keyup
oukeypress
le feu sur n'importe quelle touche, y compris les flèches, tab, etc, qui ne sont pas nécessairement changer l'entrée. Leinput
événement ne se déclenche lorsque la valeur de l'entrée a changé. - developer.mozilla.org/en-US/docs/Web/Reference/Events/input
- Sauf
change
ne se déclenche une fois le champ a perdu le focus.input
se déclenche immédiatement. - Avez-vous essayé de chercher?
- Oui, j'ai, sinon je n'aurais pas eu a créé une question pour cela. La seule chose qui vient sur Google sont des articles sur la
input
élément et comment fixer des événements. - Cette question magnifiquement répond à toutes les notions -stackoverflow.com/questions/15727324/...
- J'aime la façon que lorsque vous google à cette question aujourd'hui, c'est la première raison qui vient à l' 🙂
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas tout à fait un alias pour
keyup
parce quekeyup
le feu, même si la clé ne fait rien (par exemple: en appuyant puis en relâchant la touche de Contrôle déclenche unekeyup
événement).Une bonne façon de penser, c'est comme cela: c'est un événement qui déclenche à chaque fois que l'entrée change. Cela comprend-mais n'est pas limité à: appuyez sur les touches pour modifier l'entrée (donc, par exemple,
Ctrl
par lui-même ne déclenche pas l'événement, maisCtrl-V
pour coller du texte), la sélection d'une auto-complétion option, Linux-style moyen-cliquez sur coller, glisser-déposer, et beaucoup d'autres choses.Voir cette page et les commentaires sur cette réponse pour plus de détails.
input
équivalent ne serait pas terriblement difficile si jQuery n'est pas. Utilisez simplementkeyup
et filtrer les touches qui ne font rien. Certes, il y a un grand nombre de personnes, mais il est tout à fait possible de le faire.Object
s!)input
est en réalité plus qu'un filtréekeyup
, par exemple, il sera également feu lorsque la valeur a été sélectionné à partir de la liste de déjà utilisé des valeurs... C'était quelque chose qui serait très difficile à gérer si il n'y avait pasinput
événement.oninput
aussi se déclenche lorsque le texte est modifié par la souris (glisser-déplacer, ou via le menu de clic droit ou clic milieu pour coller).oninput
événement est très utile pour les champs de saisie des modifications.Cependant, il n'est pas pris en charge dans la version de IE < 9. Mais les anciennes versions IE a son propre événement
onpropertychange
qui fait la même chose queoninput
.De sorte que vous pouvez l'utiliser de cette façon:
Pour avoir un plein crossbrowser soutien.
Depuis le propertychange peut être déclenché pour TOUT changement de propriété, par exemple, les personnes handicapées propriété est modifiée, alors vous voulez faire inclure cette:
À l'aide de jQuery, les éléments suivants sont identiques en vigueur:
Avec le
input
cas, cependant, seul le deuxième modèle semble fonctionner dans les navigateurs que j'ai testé.Ainsi, vous attendez que cela fonctionne, mais il NE l'a PAS (au moins actuellement):
De nouveau, si vous voulez tirer parti de l'événement délégation (par exemple, pour configurer l'événement sur le
#container
avant votreinput.text
est ajouté au DOM), ce qui devrait vous venir à l'esprit:Malheureusement, encore une fois, il NE fonctionne PAS actuellement!
Seulement ce modèle fonctionne:
ÉDITÉ AVEC L'INFORMATION PLUS ACTUELLE
Je puis vous confirmer que ce modèle:
FONCTIONNE MAINTENANT aussi, dans tous les "standards" des navigateurs.
Comme claustrofob dit, oninput est pris en charge pour IE9+.
Cependant, "La oninput événement est buggé dans Internet Explorer 9. Il n'est pas déclenché lorsque les caractères sont supprimés à partir d'un champ de texte par le biais de l'interface utilisateur uniquement lorsque les caractères sont insérés. Bien que la onpropertychange événement est pris en charge dans Internet Explorer 9, mais de même à la oninput événement, c'est aussi buggé, il n'est pas tiré sur la suppression.
Depuis les caractères peuvent être supprimés dans plusieurs façons (retour arrière et Supprimer des clés, CTRL + X, la Coupe et la commande Supprimer dans le menu contextuel), il n'y a pas de bonne solution pour détecter tous les changements. Si les caractères sont supprimés par la commande Supprimer du menu contextuel, la modification ne peut être détecté dans le JavaScript dans Internet Explorer 9."
J'ai de bons résultats de la liaison à la fois d'entrée et keyup (et keydown, si vous souhaitez un feu dans IE tout en maintenant enfoncée la touche retour arrière).
Être Prudent tout en utilisant l'ENTRÉE. Cet événement se déclenche sur l'objet et sur le flou dans IE 11. Mais il est déclenché sur le changement dans d'autres navigateurs.
https://connect.microsoft.com/IE/feedback/details/810538/ie-11-fires-input-event-on-focus
Je pense que 'input' fonctionne tout simplement ici de la même façon 'oninput" ne dans le DOM Niveau O Modèle d'Événement.
D'ailleurs:
Comme silkfire l'a mentionné, j'ai aussi cherché sur google 'jQuery événement d'entrée'. Ainsi, j'ai été amené ici et étonné d'apprendre que "l'entrée" est acceptable paramètre de jquery bind() de commande.
Dans jQuery en Action (p. 102, 2008 ed.) 'input' est pas mentionné comme un événement possible (contre 20 autres, de "flou" à "décharger"). Il est vrai que, sur p. 92, le contraire pourrait être évaluée à partir de la relecture (c'est à dire à partir d'une référence à des identificateurs de chaîne entre le Niveau 0 et le Niveau 2 modèles). C'est tout à fait trompeur.
jQuery a la suite de la signature de la
.on()
méthode:.on( events [, selector ] [, data ], handler )
Événements pourraient être quelqu'un de ceux qui sont répertoriés sur cette référence:
https://developer.mozilla.org/en-US/docs/Web/Events
Cependant, ils ne sont pas tous pris en charge par tous les navigateurs.
Mozilla indique ce qui suit à propos de l'événement d'entrée:
de travail dans IE et chrome
bind
est obsolète, utilisezon