11548 sujets

JavaScript, DOM et API Web HTML5

Modérateur
Bonjour,

Dans un formulaire d'inscription et de paiement, j'ai mis trois champs pour le numéro de téléphone. Au Québec, les numéros de téléphone sont composés de trois parties :

- Code régional (3 chiffres)
- Préfixe (3 chiffres)
- Numéro (4 chiffres)

Le résultat ressemblerait à ceci : 819-123-4567.

J'ai décidé de créer trois inputs pour m'assurer que le client comprenne bien qu'il doit entrer les trois parties de son numéro de téléphone. Ca lui évite aussi de tapper les tirets. Pour agrémenter le tout, sur le onkeyup de chaque input, je vérifie si la longueur maximum du champ est atteinte. Si oui, je passe au champ suivant. Cela permet donc de tapper 8191234567 et grâce au javascript, dans cet exemple, lorsque le 9 est tappé, le focus est automatiquement donné au champ suivant. Vous me suivez toujours ?

HTML

<input name="TelephoneJourCodeRegional" type="text" id="TelephoneJourCodeRegional" value="" size="3" maxlength="3" onkeyup="AllerSuivant(this.id,'TelephoneJourPrefixe')" />


Javascript

function AllerSuivant(IDCourant,IDSuivant)
{
 if ( document.getElementById(IDCourant).value.length == document.getElementById(IDCourant).maxLength)
 	document.getElementById(IDSuivant).focus();
 }


Vous comprenez le principe ?

Mon application se veut accessible. Je trouvais donc que cette fonctionnalité rendait l'entrer du numéro de téléphone beaucoup plus efficace pour l'administrateur qui devra l'entrer très souvent. J'étais ravi d'avoir écrit ce code qui fonctionnait à merveille, jusqu'au jour où j'ai tenté d'utiliser Shift+Tab pour revenir en arrière dans un input déjà plein. Dans un tel cas, le focus est automatiquement redonné au champ suivant. Il est presque impossible d'aller modifier un numéro de téléphone sans la souris. On s'entend donc pour dire que niveau accessibilité, c'est pas la joie.

J'ai pensé détecter si la touche pressée était numérique et si c'était le cas, d'appeler ma fonction AllerSuivant. Autrement, si c'est la touche TAB ou autres choses, de rester dans le champ. Vous en pensez quoi ? Est-ce une bonne idée ou devrais-je complètement retirer ce script ?
Modérateur
Plus j'y pense, plus j'ai envie de retirer les trois inputs et d'en mettre qu'un seul. Je pourrais valider côté serveur si la valeur est dans le bon format. Je pourrais faire en sorte aussi que côté serveur et côté client que les tirets s'ajoutent automatiquement. Par exemple, si j'écris 8191234567, et que je sors du champ, si le javascript est activé, j'ajouterais 819-123-4567. Si le formulaire est soumit, le serveur vérifie si le format est bon, et s'il est sous la forme 8191234567 il s'occupe d'ajouter les tirets avant l'insertion dans la base de données.

Cela serait aussi pratique que la méthode précédente sans nuire à l'accessiblité. D'un autre côté, je ne serais plus limité par le format téléphonique Canadien. Je vais penser plus grand, même si l'application vise un marché québécois pour tout de suite.

Je songe à tout ça et je reviens plus tard. Toutefois, si vous avez des commentaires ou des idées, n'hésitez pas !
Modifié le 05 Jan 2005 - 16:16
Salut,

C'est un bien jolie script, très intéressant Smiley cligne Je pense que le test du pavé numérique est une bonne idée, car dans la pratique, ce script est très utile et fait gagner énormément de temps à l'utilisateur. J'avais pensé faire la même chose pour le téléphone français mais je n'avais pas penser à ce point.

+1 pour ton script, il est très bon et très pratique surtout Smiley smile

Par contre, comment fais-tu pour tester la valeur d'une touche ?

EDIT : il est vrai que ta deuxième solution est plus permissive, mais à la saisie, l'utilisateur aura du mal à visionner ce qu'il a écrit. Ex :

839 123 458 est plus lisible que 839123458...

De plus, un numéro va toujours de paire avec un pays je pense, donc suivant le pays tu ajustes les champs en conséquence.

EDIT 2 : ce script fonctionne à merveille sur un champ date jj mm yyyy (en plaçant un alert sur erreur) Smiley cligne
Modifié le 05 Jan 2005 - 16:30
Modérateur
Pour tester la valeur d'une touche, j'ai pensé utilisé ceci :

IE: event.keyCode
Firefox/Mozilla: event.which

Exemple pour FireFox : onkeyup="alert(event.which);"

Je n'ai pas encore essayé ces codes, je préférais analyser la situation pour m'assurer que j'allais bien prendre cette direction, ce qui, en toute apparence, ne sera plus le cas. Je pense changer pour la deuxième méthode expliqué dans mon second message.

L'usager n'est pas forcé d'écrire uniquement les chiffres sans les tirets, il peut les mettre s'il désir. Le serveur les acceptera.
Modifié le 05 Jan 2005 - 16:31