gestion des raccourcis

Le
J-F Portala
Bonjour,
je me pose la question suivante:

est il possible d'utiliser les touches F1 à F12 comme raccourcis clavier
dans un formulaire.
Les touches F5, F6 etc correspondant à un submit particulier, c'est à dire
que la gestion du submit tient compte de la touche qui a été pressée.
C'est pour éviter d'utiliser la souris ou les touhces tab pour valider un
submit particulier.

J'ai vu sur le net des accesskey mais il faut utiliser la touche alt en
combinaison.

Y a t il des solutions?

Merci de votre aide

Jeff
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 5
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
SAM
Le #22060061
Le 12/23/08 9:23 PM, J-F Portala a écrit :
Bonjour,
je me pose la question suivante:

est il possible d'utiliser les touches F1 à F12 comme raccourcis clavier
dans un formulaire.



Non, sur Mac elles servent déjà, au moins celles F9 à 12 pour le système
et certaines des précédentes pour l'application en cours.
Là, avec Fx, F5 par exemple recharge la page.

Les touches F5, F6 etc correspondant à un submit particulier, c'est à dire
que la gestion du submit tient compte de la touche qui a été pressée.
C'est pour éviter d'utiliser la souris ou les touhces tab pour valider un
submit particulier.



Enter pour envoi normal (comme d'hab quoi)
Shift + Enter pour l'autre envoi ?

J'ai vu sur le net des accesskey mais il faut utiliser la touche alt en
combinaison.

Y a t il des solutions?



contr, alt ou shift ou combinaison des 2 ...
si pas déjà occupées par raccourcis-clavier du brouteur, du système ou
personnalisés par utilisateur.


--
sm
J-F Portala
Le #22060051
Merci de ton aide.

Si je veux que cela fonctionne tout le temps, je ne vois pas d'autre
solution que de placer le focus sur un champ particulier, et en fonction de
l'appui
sur une touche (1 2 3 ou 4 ) je lance la page correspondante.
Il faudra donc que je filtre les autres touches.
J'ai essayé ceci:

<input name='champ' id='champ'
onkeypress='gestionEntreeClavier(event.keyCode);'>
function gestionEntreeClavier(e)
{
if ( e.which == undefined )
{
// IE
keynum = e.keyCode ;
}
else
{
// FF
keynum = e.which ;
}
switch (keynum)
{
case 49:
top.location=url1;
return true ;
}
}

IE me renvoie le code ascii alors que firefox me renvoie 0.
Si j'utilise onkeydown, les deux me renvoient 97 au lieu de 49 (code ascii
de '1')
Je n'arrive pas à avoir une explication de ce décalage.

Pour recuperer la bonne valeur, il faut utiliser onkeypress avec event.which
pour FF et event.keyCode pour IE en testant le navigateur.

Je voulais m'en servir pour limiter des champs numériques à des chiffres
uniquement.

Est ce qu'il y a plus simple?

Jeff
Denis Beauregard
Le #22060041
Le Wed, 24 Dec 2008 07:40:47 +0100, "J-F Portala" écrivait dans fr.comp.infosystemes.www.auteurs:

IE me renvoie le code ascii alors que firefox me renvoie 0.
Si j'utilise onkeydown, les deux me renvoient 97 au lieu de 49 (code ascii
de '1')
Je n'arrive pas à avoir une explication de ce décalage.



Peut-être la position sur le clavier (et non le code ASCII) ? Si
c'est le cas, le code pourrait changer selon la définition du clavier
(AZERTY par rapport à QWERTY ou Dvorak par exemple).


Denis
J-F Portala
Le #22060031
A priori,
cela fonctionne avec onkeypress et en faisant le test du navigateur.
Je regarderai plus tard ce code retourné avec on keydown.

Est ce qu'il n'existe pas en javascript une lib se chargeant de faire les
tests
(int - unsigned int, etc) et gérer les caractéres spéciaux.
ex: un int peut être négatif, donc on va autoriser le signe - mais il ne
peut être qu'en premiere position....

Jeff
SAM
Le #22060021
Le 12/24/08 7:40 AM, J-F Portala a écrit :
Merci de ton aide.

Si je veux que cela fonctionne tout le temps, je ne vois pas d'autre
solution que de placer le focus sur un champ particulier, et en fonction de
l'appui
sur une touche (1 2 3 ou 4 ) je lance la page correspondante.
Il faudra donc que je filtre les autres touches.
J'ai essayé ceci:

<input name='champ' id='champ'
onkeypress='gestionEntreeClavier(event.keyCode);'>




heu ...

onkeydown="gestionEntreeClavier(event);"
^^^^^^^

Pour tests de touches et/ou contr shift alt :
Les F... n'y font rien (chez moi).


function gestionEntreeClavier(e)
{
if ( e.which == undefined )
{
// IE
keynum = e.keyCode ;
}
else
{
// FF
keynum = e.which ;
}
switch (keynum)
{
case 49:



la touche qui me renvoie 49 comme keycode est celle : '&'

top.location=url1;
return true ;
}
}

IE me renvoie le code ascii alors que firefox me renvoie 0.
Si j'utilise onkeydown, les deux me renvoient 97 au lieu de 49 (code ascii
de '1')
Je n'arrive pas à avoir une explication de ce décalage.



onkeypress et onkeydown sont des choses différentes ... !


Le keycode est le keycode
et à mon idée il n'y a qu'à s'en tenir à ça.

Pourquoi vouloir un truc ASCII ?
à ce compte, se tourner alors vers charCode



Pour recuperer la bonne valeur, il faut utiliser onkeypress avec event.which
pour FF et event.keyCode pour IE en testant le navigateur.



Heu ... là y avait pas de test de navigateur, n'est-il pas ?

Mon Fx fait exactement ce que tu en dis de ton IE
(touche m = 109 ou 77 suivant que keyup ou keypress)

Je voulais m'en servir pour limiter des champs numériques à des chiffres
uniquement.



Je ne vois pas le rapport avec les keycodes ...

Si c'est trop compliqué
y a qu'à tester ce qui est "écrit", me semble-ce


function isNum(what) {
var v = what.value; ;
if(!v.charAt(v.length-1).match(/[0-9.]/)) {
alert('erreur de frappe');
what.value = v.substring(0, v.length-1);
}
}

<input onkeyup="isNum(this);">


Est ce qu'il y a plus simple?



Le truc donné ci-avant ne vérifie pas que tout le champ est bien un
nombre, il ne vérifie que le denier caractère entré.
Comme avec ce que tu tentais de faire.

Quel touche veux-tu pour submitter tel ou tel form ?
(et comment l'utilisateur le sait ?)

Un exemple pour la touche Entree :

--
sm
SAM
Le #22060011
Le 12/24/08 2:10 PM, J-F Portala a écrit :
A priori,
cela fonctionne avec onkeypress et en faisant le test du navigateur.
Je regarderai plus tard ce code retourné avec on keydown.

Est ce qu'il n'existe pas en javascript une lib se chargeant de faire les
tests



tests de quoi ?

(int - unsigned int, etc) et gérer les caractéres spéciaux.
ex: un int peut être négatif, donc on va autoriser le signe - mais il ne
peut être qu'en premiere position....



de tout le champ, donc ?
Voici avec touche Tabulation (et Alt en option)

L'appui sur Tab vérifie que le champ est bien un nombre tel que :
x
+x
-x
xxxxxxx.x
xxxxxxx.xx
Où x compris entre 0 et 9

xxx. et xxx.xxx devraient être refusés


<input onkeydown="verif(this, event);">


function verif(quoi, e) {
var k = e.keyCode;
if(k == 9 ){
var c = e.altKey;
var v = quoi.value;
if ( !v.match(/^[0-9+-]?[0-9]+(.(?=[0-9])[0-9]{0,2})$/) ) {
alert('ce n'est pas un nombre !');
quoi.focus();
return false;
}
if (c) {
alert('action complémentaire');
}
else
alert('action normale');
return true ;
}
}


--
sm
J-F Portala
Le #22059941
Bonjour,
J'arrive à peu prés gérer les évenements onkeypress sur IE et FF.
Il y a quelques différences.

J'ai essayé d'aller un peu plus loin en éliminant les caractères non
attendus.
Pour un entier, c'est simple. code ascii compris en tre 48 et 57.
Pour les entiers négatifs, les flottants, la place du caractère rend le
nombre conforme ou pas.

Je ne pense jamais à utiliser les expressions régulières, qui sont faites
pour cela.

Je te remercie pour ton exemple, mais je ne suis pas sur d'avoir compris.
1.La fonction verif est activée lorsqu'une touche est enfoncée.
(pourquoi keydown et pas keypress ?)
2.La vérification est lancée manuellement sur l'appui de la touche TAB.

Est ce qu'on ne peut pas utiliser cela automatiquement pour vérfier et
autoriser ou pas
un caractère.
int - signed int - float - signed float.
Il faut que je me familiarise avec les expressions régulières.
Merci pour ton exemple

Quand je parlais de lib, c'etait parce que je pensais que ce besoin était
assez générique.

Merci de ton aide
Jeff

x
+x
-x
xxxxxxx.x
xxxxxxx.xx
Où x compris entre 0 et 9

xxx. et xxx.xxx devraient être refusés


<input onkeydown="verif(this, event);">


function verif(quoi, e) {
var k = e.keyCode;
if(k == 9 ){
var c = e.altKey;
var v = quoi.value;
if ( !v.match(/^[0-9+-]?[0-9]+(.(?=[0-9])[0-9]{0,2})$/) ) {
alert('ce n'est pas un nombre !');
quoi.focus();
return false;
}
if (c) {
alert('action complémentaire');
}
else
alert('action normale');
return true ;
}
}


--
sm
Denis Beauregard
Le #22059931
Le Fri, 26 Dec 2008 20:32:34 +0100, "J-F Portala" écrivait dans fr.comp.infosystemes.www.auteurs:

Bonjour,
J'arrive à peu prés gérer les évenements onkeypress sur IE et FF.
Il y a quelques différences.



Et Seamonkey et Opera etc., ainsi que les variétés Linux et Mac qui
ont sans doute des codes différents pour les claviers ? Il doit y
avoir une méthode plus universelle pour identifier ce qui arrive...


Denis
SAM
Le #22059921
Le 12/26/08 8:32 PM, J-F Portala a écrit :
Bonjour,
J'arrive à peu prés gérer les évenements onkeypress sur IE et FF.
Il y a quelques différences.

J'ai essayé d'aller un peu plus loin en éliminant les caractères non
attendus.
Pour un entier, c'est simple. code ascii compris en tre 48 et 57.
Pour les entiers négatifs, les flottants, la place du caractère rend le
nombre conforme ou pas.

Je ne pense jamais à utiliser les expressions régulières, qui sont faites
pour cela.

Je te remercie pour ton exemple, mais je ne suis pas sur d'avoir compris.
1.La fonction verif est activée lorsqu'une touche est enfoncée.
(pourquoi keydown et pas keypress ?)



Par habitude ?
à cause de la différence de ce que ça renvoie ?
Ou tout simplement à cause de leur préséance ?
keyDown, keyUp, keyPress ...
(ne pas me demander pourquoi ça fonctionne dans cet ordre)


2.La vérification est lancée manuellement sur l'appui de la touche TAB.



Parce qu'on saute d'un champ à l'autre à l'aide de cette touche.

Sinon, pour simplement vérifier que ce qui vient d'être entré est un
nombre (ou plutôt ce genre de nombre là) on utilise :

<input onblur="verif(this)">

ou

<input onchange="verif(this)">


function verif(quoi) {
var v = quoi.value;
if ( !v.match(/^[0-9+-]?[0-9]+(.(?=[0-9])[0-9]{0,2})$/) ) {
alert('ce n'est pas un nombre !');
quoi.focus();
quoi.select();
}
}


Est ce qu'on ne peut pas utiliser cela automatiquement pour vérfier et
autoriser ou pas un caractère.
int - signed int - float - signed float.



exemples (ce serait mieux avec onblur) :
et à essayer aussi avec des nombres tels que : 7.1e+3

<input onkeyup="var v = this.value;
if(v != '+' && v != '-' && v != Number(v))
alert('pas un nombre');">



Voir :

Il faut que je me familiarise avec les expressions régulières.
Merci pour ton exemple



L'expression :
/^[0-9+-]?[0-9]+(.(?=[0-9])[0-9]{0,2})$/
est assez bête :

^ commence par

[0-9+-] un chiffe (de 0 à 9) ou + ou -

? 0 ou 1 fois

suivi de
[0-9]+ un chiffre 1 ou plusieurs fois

suivi de :
( bla bla )$ bla bla termine le truc recherché

où bla bla est :
.(?=[0-9]) un point seulement s'il est suivit d'un chiffre
et :
[0-9]{0,2} un chiffre de 0 à 2 fois
(0 car il faut permettre d'écrire le point)
(donc 'bla bla' peut être vide)

Quand je parlais de lib, c'etait parce que je pensais que ce besoin était
assez générique.



Pour en revenir à ce que j'ai compris de ce que tu demandais à l'origine:

C'est pour éviter d'utiliser la souris ou les touhces tab pour
valider un submit particulier.



Voici, par exemple :

--
sm
Pierre Goiffon
Le #22059811
J-F Portala wrote:
Il faut que je me familiarise avec les expressions régulières.
Merci pour ton exemple



Utiliser l'excellentissime Regulator :
http://regulator.sourceforge.net/

Une fonctionnalité permet de passer d'une pattern à un texte
intelligible, et pour :

/^[0-9+-]?[0-9]+(.(?=[0-9])[0-9]{0,2})$/

On obtient :

/^ (anchor to start of string)
Any character in "0-9+-"
? (zero or one time)
Any character in "0-9"
+ (one or more times)
Capture
.
zero-width positive lookahead
Any character in "0-9"
End Capture
Any character in "0-9"
At least 0, but not more than 2 times
End Capture
$ (anchor to end of string)/
Publicité
Poster une réponse
Anonyme