D'après mon expérience, l' input type="text"
onchange
événement ne se produit généralement qu'après avoir quitté ( blur
) le contrôle.
Existe-t-il un moyen de forcer le navigateur à se déclencher à onchange
chaque fois que le textfield
contenu change? Sinon, quelle est la manière la plus élégante de suivre cela «manuellement»?
L'utilisation d' onkey*
événements n'est pas fiable, car vous pouvez cliquer avec le bouton droit sur le champ et choisir Coller, ce qui modifiera le champ sans aucune saisie au clavier.
Est-ce setTimeout
le seul moyen? .. Moche :-)
javascript
html
forms
Ilya Birman
la source
la source
Réponses:
Mise à jour:
Voir Une autre réponse (2015).
Réponse originale de 2009:
Donc, vous voulez que l'
onchange
événement se déclenche lors du keydown, du flou et du collage? C'est magique.Si vous souhaitez suivre les modifications au fur et à mesure de leur saisie, utilisez
"onkeydown"
. Si vous devez intercepter les opérations de collage avec la souris, utilisez"onpaste"
( IE , FF3 ) et"oninput"
( FF, Opera, Chrome, Safari 1 ).1 Broken for
<textarea>
sur Safari. Utiliser à latextInput
placela source
onkeypress
doit être utilisé à la place deonkeydown
.onkeydown
se déclenche lorsqu'une touche est enfoncée. Si un utilisateur maintient une touche enfoncée, l'événement ne se déclenchera qu'une seule fois pour le premier personnage.onkeypress
se déclenche chaque fois qu'un caractère est ajouté au champ de texte.onchange
feu sur toutes ces actions.<input onchange="doSomething();" onkeypress="this.onchange();" onpaste="this.onchange();" oninput="this.onchange();">
fera assez bien pour la plupart.$().on('change keydown paste input', function() {})
Ces jours-ci, écoutez
oninput
. On se sent commeonchange
sans avoir besoin de perdre le focus sur l'élément. C'est HTML5.Il est pris en charge par tout le monde (même mobile), sauf IE8 et les versions antérieures. Pour IE, ajoutez
onpropertychange
. Je l'utilise comme ceci:la source
oninput
même dans IE9 est cependant partielle ( caniuse.com/#feat=input-event ).innerText
à la place deinnerHTML
sorte qu'aucune majoration ne soit rendueLe code ci-dessous fonctionne bien pour moi avec Jquery 1.8.3
HTML:
<input type="text" id="myId" />
Javascript / JQuery:
la source
keydown
car il va dupliquer la valeur de l'entrée, supprimez-le.Javascript est imprévisible et amusant ici.
onchange
se produit uniquement lorsque vous brouillez la zone de texteonkeyup
&onkeypress
ne se produit pas toujours lors d'un changement de texteonkeydown
se produit lors du changement de texte (mais ne peut pas suivre le copier-coller avec un clic de souris)onpaste
&oncut
se produit en appuyant sur la touche et même avec le clic droit de la souris.Ainsi, pour suivre le changement de zone de texte, nous avons besoin
onkeydown
,oncut
etonpaste
. Dans le rappel de ces événements, si vous vérifiez la valeur de la zone de texte, vous n'obtenez pas la valeur mise à jour car la valeur est modifiée après le rappel. Une solution consiste donc à définir une fonction de temporisation avec une temporisation de 50 mili-secondes (ou peut-être moins) pour suivre le changement.C'est un hack sale mais c'est le seul moyen, comme je l'ai recherché.
Voici un exemple. http://jsfiddle.net/2BfGC/12/
la source
oninput
ettextInput
sont les événements qui est la solution réelle pour cela, mais ce n'est pas pris en charge par tous les navigateurs.onkeyup
etonkeydown
, qui sont similaires. Les deux peuvent capturer les touches Ctrl, Alt, Maj et Meta. Pour le troisième point, je suppose que vous vouliez direonkeypress
.onkeyup
se produit après avoir tapé par exemple j'appuiet
lorsque je lève le doigt l'action se produit maiskeydown
l'action se produit avant que je ne chiffre le caractèret
J'espère que cela est utile pour quelqu'un.
Il
onkeyup
vaut donc mieux quand vous voulez envoyer ce que vous venez de taper maintenant.la source
J'avais une exigence similaire (champ de texte de style Twitter). Utilisé
onkeyup
etonchange
.onchange
prend réellement en charge les opérations de collage de la souris lors de la perte de focus du champ.[Mettre à jour] En HTML5 ou version ultérieure, utilisez
oninput
pour obtenir des mises à jour en temps réel des modifications de caractères, comme expliqué dans les autres réponses ci-dessus.la source
oninput
est la voie à suivre. Mais, quand j'ai implémenté, HTML5 n'existait pas et nous avions IE 8 :(. J'apprécie votre mise à jour car elle fournit des informations à jour pour les utilisateurs.Je pense qu'en 2018, il vaut mieux utiliser l'
input
événement.-
Comme le décrit la spécification WHATWG ( https://html.spec.whatwg.org/multipage/indices.html#event-input-input ):
-
Voici un exemple d'utilisation:
la source
Si vous utilisez UNIQUEMENT Internet Explorer, vous pouvez utiliser ceci:
J'espère que cela pourra aider.
la source
il existe une solution assez proche (ne corrigez pas toutes les méthodes de collage) mais la plupart d'entre elles:
Cela fonctionne pour les entrées ainsi que pour les zones de texte:
Fait comme ça:
Comme je l'ai dit, toutes les façons de coller ne déclenchent pas un événement sur tous les navigateurs ... pire, certains ne déclenchent aucun événement, mais les minuteries sont horribles à utiliser pour cela.
Mais la plupart des méthodes de collage se font avec le clavier et / ou la souris, donc normalement un onkeyup ou onmouseup est déclenché après un collage, également onkeyup est déclenché lors de la frappe au clavier.
Assurez-vous que votre code de vérification ne prend pas beaucoup de temps ... sinon l'utilisateur obtient une mauvaise impression.
Oui, l'astuce consiste à tirer sur la touche et sur la souris ... mais attention, les deux peuvent être tirés, alors gardez cela à l'esprit !!!
la source
Veuillez évaluer la prochaine approche à l'aide de JQuery:
HTML:
Javascript (JQuery):
la source
"input" a fonctionné pour moi.
la source
Vous pouvez utiliser les
keydown
,keyup
et leskeypress
événements ainsi.la source
Pour suivre chacun, essayez cet exemple et, avant cela, réduisez complètement le taux de clignotement du curseur à zéro.
onblur: l'événement génère à la sortie
onchange: l'événement est généré à la sortie si des modifications sont apportées au texte d'entrée
onkeydown: l'événement est généré à n'importe quelle pression sur une touche (pour une pression prolongée sur une touche également)
onkeyup: l'événement est généré sur n'importe quelle libération de clé
onkeypress: identique à onkeydown (ou onkeyup) mais ne réagit pas pour ctrl, backsace, alt autre
la source
2018 ici, c'est ce que je fais:
Si vous pouvez signaler des failles dans cette approche, je vous en serais reconnaissant.
la source
Méthode 1: ajouter un écouteur d'événements pour
input
:Méthode 2: définissez la
oninput
propriété avec JavaScript:Méthode 3: définissez la
oninput
propriété avec HTML:la source
Robert Siemer addEventListener n'est pas pris en charge dans IE8.
"Les anciennes versions d'IE prenaient en charge une méthode EventTarget.attachEvent () propriétaire équivalente." https://developer.mozilla.org/it/docs/Web/API/Element/addEventListener
la source