Le Focus de saisie suivante une fois atteint la valeur maxlength
Comment puis-je me concentrer la prochaine entrée une fois l'entrée précédente a atteint son maxlength value?
a: <input type="text" maxlength="5" />
b: <input type="text" maxlength="5" />
c: <input type="text" maxlength="5" />
Si un utilisateur colle le texte qui est plus grande que la maxlength, idéalement, il devrait répandre dans l'entrée suivante.
jsFiddle: http://jsfiddle.net/4m5fg/1/
Je dois souligner que je ne pas souhaitez utiliser un plugin, que je préfère apprendre la logique derrière cela, que d'utiliser quelque chose qui existe déjà. Merci pour la compréhension.
- Son but est "d'apprendre la logique derrière cela".
- Double Possible de le Déplacement d'un focus lorsque le champ de texte de saisie atteint une longueur max
Vous devez vous connecter pour publier un commentaire.
Pas de jQuery utilisé et est très propre mise en œuvre:
http://jsfiddle.net/4m5fg/5/
..
var target = e.srcElement || e.target;
m'a aidé à utiliser votre solution. Merci!!!!maxLength
àtarget.maxLength
au lieu deparseInt(target.attributes["maxlength"].value, 10)
afin de le faire fonctionner. Cependant, je suis en utilisant le bon auditeur au lieu de redéfinition de laonkeyup
fonction:container.addEventListener('keyup', moveToNext)
(oùmoveToNext
est la fonction de la réponse ci-dessus).Vous pouvez regarder pour l'entrée dans les champs et tester sa valeur:
Travail de démonstration.
La
setTimeout
est là pour s'assurer que le code sera exécuté uniquement après l'entrée est terminée et la valeur actualisée. La liaisoninput
assure la plupart des types d'entrée déclenche l'événement, y compris les presses à copier/coller (même à partir de la souris) et le drag & drop (mais dans ce cas, ce dernier ne fonctionnera pas, car l'accent a été mis sur la déplaçable, pas le drop).Note: sur certains navigateurs plus anciens, vous pourriez aussi avoir besoin de lier
propertychange
.Pour ce faire, vous devrez peut-être supprimer le
maxlength
attribut à l'aide de JavaScript (pour être en mesure de capturer la totalité d'entrée), et de mettre en œuvre cette fonctionnalité vous-même. J'ai fait un petit exemple, les parties ci-dessous:Cela supprime l'attribut, mais l'enregistre dans
données
, de sorte que vous pouvez accéder à plus tard.Ici la longueur maximum de la logique est réintroduit dans le code JavaScript, ainsi que d'obtenir le "rebut" et une partie de l'utiliser dans un appel récursif de
spill
. Si il n'y a aucun élément suivant, l'appel àdata
sera de retourundefined
et la boucle va s'arrêter, de sorte que l'entrée sera tronqué dans le dernier champ.propertyChange
obligatoire ? il semble que cela fonctionne bien, même sans queinput
est pour Firefox etpropertychange
pour les autres, mais les choses ont peut être changé depuis (c'est à dire peut-être que chaque navigateur prend en chargeinput
maintenant). La seule façon d'en être sûr est de le tester sur différents environnements. (P. S. c'estpropertychange
, paspropertyChange
- je l'ai déjà corrigé ma réponse).next
appel) qui doit être adaptée à chaque cas particulier (par exemple un.nextAll
s'ils sont tous dans la même div, ou un.parent().next().find
si ils sont chacun dans son propre div, etc).Vous pouvez utiliser du JavaScript:
Voir DÉMO.
Vérifier la longueur de caractère avec
el.value.length
. Si elle est égale à la valeur maximale, passer au champ suivant en utilisantfocus()
. Lier cette fonction à l'événement keyup aveconkeyup
de sorte que la fonction est déclenché chaque fois que l'utilisateur a les clés à un personnage.si vous allez avoir beaucoup de domaines, vous pouvez faire quelque chose comme cela.
essentiellement sur
keyup
obtenir la longueur de l'entrée et de le comparer à la maxlength, si des correspondances, puisfocus
sur le prochain champ de saisie.http://jsfiddle.net/btevfik/DVxDA/
Si vous ajoutez des champs de saisie de texte de façon dynamique, alors vous pouvez essayer cette.
Cela re-injecter le script dans les DOM et fonctionne Parfaitement.
JS:
HTML:
Si vous êtes concentré sur la création de la carte(débit/crédit) nombre type d'entrée. Puis nettoyer facilement gérable version jQuery comme suit:
JS:
CSS:
HTML:
Vérifié Réponse à un problème, qui mettent l'accent champ précédent si le champ précédent ont validité de la longueur
J'ai Modifié la Réponse ci-Dessus pour fixer complète longueur de la balise précédente
Mis à jour btevfik code, Onkeyup ou onkeydown permettra de créer de problème sur l'onglet de navigation. Elle va être difficile à éditer ou modifier le texte à l'intérieur de la zone d'entrée, comme il sera limité à maxlength. Nous pouvons donc utiliser oninput événement pour réaliser la tâche.
DÉMO
HTML
Javascript
CSS