OVH Cloud OVH Cloud

empecher le submit d'un formulaire par CTRL+ENTER

3 réponses
Avatar
Saad Saad
Bonsoir,

Je cherche la manière d'empêcher le submit d'un formulaire avec la
combinaison des touches CTRL+ENTER sous Firefox.

En fait, mon curseur se trouve dans un input text, les flèches
permettent de descendre et monter dans une <select> tout en gardant le
focus dans mon input.

Je voudrais qu'à l'exécution de la combinaison cité si dessus, l'écran
aille directement à la page qui sera sélectionner dans le select.

Si je suis en dehord de l'input cela fonctionne parfaitement, mais si je
suis dans l'input le formulaire est "submiter" directement.

Mon programme ne tournera que sur Firefox.

function move_liste(e)
{
var liste=document.getElementById("liste");

if (e.keyCode==38 && liste.selectedIndex>0) //fleche haut
liste.selectedIndex-=1;
else if (e.keyCode==40 && liste.selectedIndex<liste.length-1) //fleche bas
liste.selectedIndex+=1;
else if (e.ctrlKey && e.keyCode==13 && liste.selectedIndex >= 0)
//ctrl+enter
liste.ondblclick();
}


<body onKeyDown="move_liste(event);">


Bien sur je peux mettre la combinaison CTRL+fleche droite, mais mon
client voudrait CTRL+ENTER


merci de votre aide

3 réponses

Avatar
ASM

mais mon
client voudrait CTRL+ENTER


Et si on faisait Control + fleches ET Control + Enter
çà plairait-y ?
(perso, je trouve çà + logique d'emploi)

Un peu génant ces fleches qui font valser dans le champ ...

m'enfin pour ton Enter
il suffit d'avoir au bon moment un onSubmit à false dans le form

Ceci fonctionne chez moi (IE5.1)

<html>
<script type="text/javascript">
var contr = true;
function move_liste(e) {
var liste=document.forms[0].liste;
if(e.ctrlKey) {
if (e.keyCode=8 && liste.selectedIndex>0) //fleche haut
liste.selectedIndex-=1;
else if (e.keyCode=@ && liste.selectedIndex<liste.length-1) //fleche bas
liste.selectedIndex+=1;
else if (e.keyCode= && liste.selectedIndex >= 0)
liste.ondblclick();
contr = false;
}
else contr=true;
}
</script>
<body onKeyDown="move_liste(event);">
<form action="asm1.gif" target="_blank" onsubmit="return contr;">
Choisir dans liste : [Control]+[Fleche haut] / [Control]+[Fleche bas]<br>
Valider choix liste : [Control]+[Entree]<br>
<select name="liste"
ondblclick="alert('choix = '+this.options[this.options.selectedIndex].text);">
<option>mon test 1</option>
<option>mon test 2</option>
<option>mon test 3</option>
<option>mon test 4</option>
<option>mon test 5</option>
<option>mon test 6</option>
</select>
<p>Test de chanp <input type=text> avec focus
</form>
</html>

--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************

Avatar
Saad Saad
Salut,

Effectivement naviguer avec CTRL est mieux, le curseur reste à sa place.
Comme cité dans mon message, je ne travail que sur Firefox (pour les
raisons que tu devines)

Après moultes recherche je suis arrivé à exécuter la fonction de mon
select sans exécuter le submit de mon formulaire
je te donne l'astuce, qui n'est peux être pas très professionnel mais
qui fonctionne très bien

Attention, elle arrive...

tan tan !!

setTimeout("document.getElementById('liste').ondblclick();", 0);


Et voilà, j'ai simplement mis ma commande dans un setTimeout qui permet
de retarder un script, et même mis à 0
permet d'afficher ma page à partir d'une valeur de mon select avec
CTRL+ENTER avant que le formulaire ne soit submiter


merci de quand même de ton aide

Saad




mais mon
client voudrait CTRL+ENTER



Et si on faisait Control + fleches ET Control + Enter
çà plairait-y ?
(perso, je trouve çà + logique d'emploi)

Un peu génant ces fleches qui font valser dans le champ ...

m'enfin pour ton Enter
il suffit d'avoir au bon moment un onSubmit à false dans le form

Ceci fonctionne chez moi (IE5.1)

<html>
<script type="text/javascript">
var contr = true;
function move_liste(e) {
var liste=document.forms[0].liste;
if(e.ctrlKey) {
if (e.keyCode=8 && liste.selectedIndex>0) //fleche haut
liste.selectedIndex-=1;
else if (e.keyCode=@ && liste.selectedIndex<liste.length-1) //fleche bas
liste.selectedIndex+=1;
else if (e.keyCode= && liste.selectedIndex >= 0)
liste.ondblclick();
contr = false;
}
else contr=true;
}
</script>
<body onKeyDown="move_liste(event);">
<form action="asm1.gif" target="_blank" onsubmit="return contr;">
Choisir dans liste : [Control]+[Fleche haut] / [Control]+[Fleche bas]<br>
Valider choix liste : [Control]+[Entree]<br>
<select name="liste"
ondblclick="alert('choix = '+this.options[this.options.selectedIndex].text);">
<option>mon test 1</option>
<option>mon test 2</option>
<option>mon test 3</option>
<option>mon test 4</option>
<option>mon test 5</option>
<option>mon test 6</option>
</select>
<p>Test de chanp <input type=text> avec focus
</form>
</html>




Avatar
ASM

setTimeout("document.getElementById('liste').ondblclick();", 0);

Et voilà, j'ai simplement mis ma commande dans un setTimeout qui permet
de retarder un script, et même mis à 0


ha oui, pas mal comme astuce !
faudrait voir ce que ça donne en mettant un target="_blank" dans le form
et faire que le dblclick affiche dans mme fenêtre

J'imagine que le formulaire est bien submité
(ce que devrait vérifier le test blank)
mais ...
0 millisecondes après c'est le dblclick de liste qui s'actionne
et qui fait donc afficher le choix de la liste

--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************