Comment dois-je attendre jusqu'à ce que l'utilisateur a fini d'écrire dans un texte d'entrée pour appeler une fonction?
Je suis de la conception d'un site web et je voudrais pouvoir appeler une fonction 1 seconde après la dernière saisie de l'utilisateur. J'ai essayé d'utiliser onKeyUp, mais il a attendu 1 seconde après la première frappe.
Personne ne sait comment serait-ce possible?
- Vous pouvez utiliser un onchange événement qui se produit lorsque l'utilisateur quitte le terrain et se déplace vers le prochain champ dans le formulaire. Vous pouvez ensuite ajouter votre code d'attente là-bas et l'incendie qui a 1 seconde après les changements sur le terrain.
- Il n'y a pas droit, 100% de façons de le faire. Le plus simple est d'utiliser le flou de l'événement de l'entrée. (d'autres moyens pourraient être d'attendre X secondes après l'utilisateur la saisie terminée).
- J'irais avec le onblur événement qui se produit lorsqu'un objet perd le focus. Donc, elle fait en sorte que dès que l'utilisateur quitte le champ, cela signifie qu'il/elle est fait de la saisie de leur info.
- Intéressante question - est-il une raison particulière pour expliquer pourquoi vous voulez le faire?
- onchange() ne se produit pas lorsque l'utilisateur quitte le champ, ce serait onblur(). À partir du lien que vous avez fourni "L'événement onchange se produit lorsque le contenu d'un champ modifications".
- Oui, mais le champ ne pas inscrire un changement à chaque frappe de touche. Si vous appuyez sur la touche entrée ou, plus communément, le champ perd le focus, puis le changement est ramassé et l'événement déclenché.
- Fondamentalement, lorsque l'utilisateur a terminé de taper dans une zone de texte, il est présenté avec un nouveau. Depuis la zone de texte était la dernière, je ne pouvais pas utiliser onBlur() depuis que j'aurais dû attendre jusqu'à ce que l'accent a été mis sur une autre case.
Vous devez vous connecter pour publier un commentaire.
Une autre approche similaire, sans globals:
...
Vous pouvez cet extrait ici.
Vous pouvez utiliser un
keyDown
(oukeyUp
) de l'événement qui définit une fonction à exécuter en 1 seconde et si l'utilisateur tape une autre clé au sein de cette seconde, vous pouvez effacer le délai d'attente et de définir un nouveau.E. g.
Tant pis, j'ai trouvé un moyen de le faire. J'ai appeler une fonction sur chaque onkeyup() qui incrémente un compteur et ensuite attendre 1 seconde. Après 1 seconde écoulé, il décrémente le compteur et vérifier si elle est égale à 0.
Juste modifier votre code html d'entrée et de jeter première ligne dans vos fonctions actuelles de sorte que vous n'êtes pas avoir à recoder tout ce que vous avez. Elle n'affectera pas les vieux code-appel de fonctions, puisque si
onkeypress
n'est pas définie, alorsmykeypress
sera toujours < 1.Il est simple de plugin j'ai fait qui fait exactement cela. Il nécessite beaucoup moins de code que certaines des solutions proposées et il est très léger (~0,6 kb)
Tout d'abord vous créer
Bid
objet que ce qui peut êtrebumped
à tout moment. Chaque bosse va retarder la cuisson Offre de rappel pour la prochaine donné quantité de temps.Quand
Bid
objet est prêt, nous avons besoin debump
en quelque sorte. Attachons cogner àkeyup
event
.Ce qui se passe ici est:
Chaque fois que l'utilisateur appuie sur la clé, l'offre est "retardé" (tombé) pour la prochaine 200ms. Si 200ms va passer sans être 'tombé' encore une fois, la fonction de rappel sera tiré.
Aussi, vous avez 2 fonctions supplémentaires pour l'arrêt de l'enchère (si l'utilisateur a appuyé sur la touche échap ou cliqué en dehors de l'entrée par exemple) et pour la finition et la cuisson de rappel immédiatement (par exemple lorsque l'utilisateur presse la touche entrée):