6
votes

jQuery clavier événements

Utiliser jQuery, je voudrais capturer un événement de clavier qui est:

  • avant l'utilisateur soumet son doigt de la clé
  • après les caractères de l'événement du clavier se sont inscrits dans la zone de saisie.

    Pour clarifier, affichez ce exemple . Lorsque keypress incendies, la valeur n'a pas encore été mise à jour.

    [modifier]

    Apparemment, je n'étais pas clair sur ce dont j'ai besoin.

    La fonction doit être appelée avant l'utilisateur soulever son doigt de la clé, mais après le caractère de la clé est placé dans la boîte d'entrée. Donc ce qui suit ne fonctionne pas:

    • Keydown: à l'événement KeyPress , la valeur de la zone de texte n'a pas été mise à jour
    • KeyPress: à l'événement KeyPress , la valeur dans la zone de texte n'a pas été mise à jour
    • Keyup: Ceci est appelé lorsque l'utilisateur soulevait son doigt, qui est trop tard.

0 commentaires

4 Réponses :


3
votes

Vous pouvez écouter l'événement Keydown et stocker la valeur dans une variable. Cette variable aurait la valeur tel qu'il était avant la nouvelle entrée et la nouvelle entrée serait incluse dans l'événement

mise à jour:

OK, j'ai mal compris vos besoins, mais il n'y a pas d'événement qui répondrait à vos besoins. La seule chose à laquelle je puisse penser de simuler ce comportement est la suivante:

  • Écoutez sur Keydown / KeyPress
  • Obtenez la valeur à partir de l'objet Event (Obtenir Event.Quel , puis convertissez-le en valeur réelle)
  • Utilisez une variable comme je l'ai mentionnée dans le conseil d'origine et concaténate la nouvelle entrée à celle-ci

    Voici un violon: http://jsfiddle.net/hpxuu/13/

    Ce n'est évidemment pas une solution parfaite, car elle en a besoin (on pourrait argumenter inutile) de travailler correctement. Je conseillerais de repenser vos besoins, mais si ce comportement est absolument ce dont vous avez besoin, je pense que c'est une étape dans la bonne direction.


5 commentaires

J'ai besoin de la nouvelle valeur d'entrée avant la clé est levée.


Vous avez donc besoin du code pour être psychique et de connaître que l'utilisateur va soulever leur doigt le prochain milliseconde et non celui après?


@Sw bien, Umm ... N'est-ce pas exactement ce que ma suggestion ferait? Voici un violon: jsfiddle.net/hpxuu/10


Le clavier vous donnera la valeur avant la levée de la clé


Le violon ne fonctionne pas si l'utilisateur ne saisit pas à la fin de la zone de texte.



2
votes

Vous pouvez utiliser settimeout : xxx

Démo en direct: http://jsfiddle.net/hpxuu/8/


2 commentaires

À moins que je ne me trompe pas, le délai d'attente n'est pas garanti d'être appelé à l'heure convenue.


@SW Le mécanisme Settimeout a en effet un délai minimum qui est la CCA. 10ms (selon le navigateur). Cependant, vous pouvez définir une fonction setzerotimeout ( le code est ici ) qui s'exécutera immédiatement après le retour du gestionnaire d'événements KeyPress.



3
votes

Utilisez événement Keyup , un exemple sur jsfiddle xxx

Il se produit après vous soulevez la clé. Je ne sais pas ce que vous voulez réaliser, mais vous pouvez stocker l'état avant de soulever la clé (sur clé ou keypress ) et de la restauration ultérieure si nécessaire. Vous pouvez également Arrêter la sortie dans l'événement MELINUP UTILISANT E.PREVENTDEFAULT () , donc même après que la clé est en hausse, il ne enregistrera pas les valeurs de la zone.


0 commentaires

13
votes

Vous pouvez utiliser l'événement INPUT , qui fonctionne dans les versions récentes de tous les grands navigateurs: xxx

Malheureusement, cela ne fonctionne pas dans IE <= 8 . Toutefois, dans ces navigateurs, vous pouvez utiliser l'événement de biens sur la propriété de la valeur à la place: xxx

si régulier javascript Le répondeur @andy e a couvert cela en détail sur son blog: https://web.archive.org /web/20140626060232/http://whattheheadsaid.com/2011/10/update-html5-oninput-event-plugin-for-jQuery


5 commentaires

Incroyable, je n'ai jamais vu cet événement auparavant, mais ça marche parfaitement!


@franzlorenzon: Oui, Andy's Blog semble être brisé. Je vais lui envoyer un message.


Et si la modification de l'entrée est faite par programmation? Y a-t-il un moyen d'attraper ce changement? (Exemple: L'entrée est en lecture seule, changée uniquement via un code JavaScript - Comment attraper ce changement?)


Veuillez mettre à jour ou supprimer ce lien de blog, sa redirection sur le site Web de Spammer.


@Maidul: C'est une honte. Il y avait quelques choses utiles sur ce site. Je vais supprimer ou remplacer le lien.