Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

gestion des raccourcis

44 réponses
Avatar
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

10 réponses

1 2 3 4 5
Avatar
SAM
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
Avatar
J-F Portala
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
Avatar
Denis Beauregard
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
Avatar
J-F Portala
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
Avatar
SAM
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 :
<http://stephane.moriaux.pagesperso-orange.fr/truc/key_code.htm>
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 ... !
<http://forum.alsacreations.com/topic-6-27783-1-Onkeydown-ou-onkeypress.html>


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

<http://www.quirksmode.org/js/keys.html>


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 :
<http://stephane.moriaux.pagesperso-orange.fr/truc/key_enter_tab.htm>

--
sm
Avatar
SAM
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
Avatar
J-F Portala
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
Avatar
Denis Beauregard
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
Avatar
SAM
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');">

<input onkeyup="if(isNaN(this.value)) alert('pas un nombre');">


Voir :
<http://fr.selfhtml.org/javascript/objets/math.htm>
<http://fr.selfhtml.org/javascript/objets/number.htm>

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 :
<http://cjoint.com/data/mzok0S31C2.htm>

--
sm
Avatar
Pierre Goiffon
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)/
1 2 3 4 5