J’ai un script pas compliqué : il remplace la fonction de la touche ENTREE par la touche TAB
<script language="javascript">
function process_keydown(e) {
if(window.event){
if (window.event.type == "keydown" && window.event.keyCode == 13)
window.event.keyCode=9;
}
if(e){
if (e.type == "keydown" && e.keyCode == 13){
e.keyCode=9; //C'est là qu'est le probleme !!!
return true;
}
}
}
document.onkeydown = process_keydown;
</script>
fonction que j’appelle dans
mais voila, sous IE, ca marche mais pas sous Firefox ou il me met un zoli message ( vu à l’aide de FireBug) : “setting a property that has only a getter”
function doKeyDown(e) {
var whichASC = isNetscape ? e.which : event.keyCode;
switch (whichASC) {
case XXX: // XXX est le code de ta touche…
// code ici…
break;
}
}[/code]
Tu peux toujours essayer avec ce code voir si ça passe mieux…
Ah oui, effectivement. Pour Firefox, ton “e.keyCode” est en lecture seule, d’où le souci.
De mon côté, je ne fais pas ce genre de choses, je fais “juste” des traitements adaptés à chaque touche.
Sinon, une piste :
Dans ton code :
if (e.type == "keydown" && e.keyCode == 13){
e.keyCode=9; //C'est là qu'est le probleme !!!
return true;
}
Tu retournes false (ce qui devrait annuler la prise en compte de la touche Entrée), et tu crées un nouvel évènement clavier correspondant à la touche Tab.
Bon, je propose ça, mais je ne sais ni comment faire, ni même si c’est possible B)
Bon, en faisant une petite recherche on da net, je tombe sur cette page, avec, en citation de Will Rickards WT :
"[i]
The most common scenario I encounter for needing this in an html form. For some reason hitting enter on any of the input controls, even checkboxes, causes the form to submit. The user didn’t really want to submit the form. The user expected to go to the next field or something. So we translate (is that better than substitute?) the enter (13) keycode into a tab (9) and pass that through. In IE works fine. If FF no go, it doesn’t complain about the assignment, it just processes the enter and submits the form. Maybe it has to do with different event models.
Yes I could probably improve the solution above for FF by not only cancelling the key event but by also figuring out which control is next in the tab order and doing a control.focus(). And that would solve my problem and might be made to work in both browsers. Anybody want to take a stab at implementing it?
[/i]"
Son idée me parait pas mal.
A la limite, tu pourrais essayer de donner en argument à process_keydown le prochain élément du formulaire. Vu que c’est de la génération dynamique via PHP, ça doit être possible.
Dans ton code, tu ferais ça pour process_keydown :
function process_keydown(e, nextObject) {
if(window.event){
if (window.event.type == "keydown" && window.event.keyCode == 13)
window.event.keyCode=9;
}
if(e){
if (e.type == "keydown" && e.keyCode == 13){
nextObject.focus();
return false;
}
}
}
[quote=“rorotaz, post:5, topic: 31392”]Son idée me parait pas mal.
A la limite, tu pourrais essayer de donner en argument à process_keydown le prochain élément du formulaire. Vu que c’est de la génération dynamique via PHP, ça doit être possible.[/quote]
j’essaie ca de suite B)
bon ben ca marche pas … mais je comprends plus rien !!! quand je tape Entréé, le curseur va bien au suivant , mais il valide quand meme …
Et j’ai une belle erreur JSCRIPT toute folle
[Exception… “‘Permission refusée de modifier la propriété XULElement.selectedIndex’ when calling method: [nsIAutoCompletePopup::selectedIndex]” nsresult: “0x8057001e (NS_ERROR_XPC_JS_THREW_STRING)” location: “JS frame :: http://192.168.30.4/ajout_note_classe.php :: process_keydown :: line 15” data: no]
juste un petit up, pour dire que ca marche toujours pas sous FF … si qqun de gentil pourrait m’aider , SVP !!!
quand je tape Entrée, le curseur va bien au suivant , mais il valide quand meme …
Et j’ai une belle erreur JSCRIPT toute folle
[Exception… “‘Permission refusée de modifier la propriété XULElement.selectedIndex’ when calling method: [nsIAutoCompletePopup::selectedIndex]” nsresult: “0x8057001e (NS_ERROR_XPC_JS_THREW_STRING)” location: “JS frame :: http://192.168.30.4/ajout_note_classe.php :: process_keydown :: line 15” data: no]
A croire que je suisle seul a vouloir faire ca … B)
Bah non, vu que dans le message du forum que je citais, les gars voulaient faire comme toi (sans toutefois apporter de réponses).
Pour ton souci, question bête : Dans ta gestion de la touche Entrée, est-ce que tu retournes bien un false juste après ?
J’y connais pas grand chose en PHP, mais peut-être que tu arrives au dernier élément de ton formulaire, et donc celui-ci n’a pas de suivant. Pour t’éviter le pb JS :
function process_keydown(e,nextObject) {
if(window.event){
if (window.event.type == "keydown" && window.event.keyCode == 13)
window.event.keyCode=9;
}
if(e){
if (e.type == "keydown" && e.keyCode == 13){
alert("prochain="+nextObject);
if (nextObject) {
nextObject.focus();
}
return false;
}
}
}