Empêcher le submit par la touche enter

Eléphanteau du PHP | 16 Messages

08 janv. 2010, 11:14

Bonjour à tous et bonne année !

J'ai un petit soucis dans un code :

J'ai des champs de saisie Username pour aller chercher dans un ldap les info du user et du groupleader donc 2 champs séparé

J'ai constaté que beaucoup d'utilisateur utilise par reflex la touche Enter du clavier lorsqu'ils saisissent dans ces champs pour lancer la recherche .... j'ai donc lié ma fonction à la touche Enter pour ces 2 champs.

ça marche très bien :

Code : Tout sélectionner

onKeyPress="if (event.keyCode == 13) mafonction();"
sauf que ça envoie aussi le formulaire en même temps et comme j'ai un script de vérification ça l'active et me fait des jolis messages d'erreur "le champs blabla doit être rempli".

Le problème c'est que j'ai trouvé quelques info la dessus mais ça desactive la touche Enter pour toute la page ou tout le formulaire et j'en ai besoin quand même :?

J'ai essayé ça sur le bouton submit mais ça marche pas du tout :p

Code : Tout sélectionner

<input type="button" name="Send" value="Submit" onclick="if(event.keyCode == 13){return false;}else{return verifForm(this.form);}"/>
Si quelqun a une brillante idée je suis preneur,la j'en suis a me demander si je ne vais pas simplement desactiver le bouton submit tant que tout les champs ne sont pas remplis #-o

Merci d'avance
YpLee

Eléphanteau du PHP | 16 Messages

08 janv. 2010, 12:21

Petite précision :

Je viens de tester avec un submit de type button et ça marche très bien sur FireFox le formulaire n'est pas envoyé par la touche Enter.
Par contre ça ne marche pas du tout sur Safari qui envoie le formulaire même si il n'y pas de bouton du tout. Il suffit en fait d'avoir un champ qui a le focus pour que Enter envoie le formulaire ... Et chez nous il y a bien 50% de mac ... Je crois que je vais laisser tomber mon idée et rester comme avant avec un bête lien qui envoie la fonction de recherche.

Mais si quelqu'un a la solution à mon problème je suis preneur quand même :roll:
YpLee

Mammouth du PHP | 2937 Messages

08 janv. 2010, 14:16

ça marche très bien :

Code : Tout sélectionner

onKeyPress="if (event.keyCode == 13) mafonction();"
Et pourquoi ne pas agir sur l'événement onsubmit ?

Eléphanteau du PHP | 16 Messages

08 janv. 2010, 14:22

ça marche très bien :

Code : Tout sélectionner

onKeyPress="if (event.keyCode == 13) mafonction();"
Et pourquoi ne pas agir sur l'événement onsubmit ?
comment ça ? je ne comprend pas.

le bout de code que tu quote c'est pour envoyer ma fonction par la touche Enter.
Ce qui me gène c'est que, sur Safari, ça envoie aussi le submit ...
YpLee

Mammouth du PHP | 2937 Messages

08 janv. 2010, 14:24

L'événement qui concerne l'envoi d'un formulaire (que ce soit par la touche Entrée ou par un clic sur le bouton de validation), c'est onsubmit. L'événement onkeypress n'agit que sur le fait qu'une touche a été pressée. Pour empêcher la soumission d'un formulaire, c'est sur l'événement onsubmit qu'il faudrait agir.

ViPHP
ViPHP | 3607 Messages

08 janv. 2010, 19:44

En gros tu auras quelque chose comme ça:

Code : Tout sélectionner

<form onsubmit="return false;"> </form>
Après je suis pas sûr que ça fonctionne... :/

Sinon montre nous un peu plus ton histoire, et explique un peu mieux, parceque je ne comprend pas l'utilité d'avoir un formulaire du coup...?

Eléphanteau du PHP | 16 Messages

11 janv. 2010, 10:31

parceque je ne comprend pas l'utilité d'avoir un formulaire du coup...?
Le formulaire doit être envoyé uniquement par un clic sur le bouton et pas par la touche Enter.
Par contre la touche Enter ne doit pas être désactivée pour toute la page (ça c'est facile) mais uniquement pour le bouton submit.

Sur FireFox y'a pas de problème, mais ça ne marche pas sur Safari qui envoie le formulaire avec Enter de toute façons (même si il n'y aucun bouton d'ailleurs ... il suffi qu'un champs aie le focus).

Mais c'est pas grave je vais faire autrement :p

Merci à tous
YpLee

Mammouth du PHP | 2937 Messages

11 janv. 2010, 10:37

Le formulaire doit être envoyé uniquement par un clic sur le bouton et pas par la touche Enter.
Et que fais-tu des utilisateurs qui utilisent leur clavier au lieu de la souris parce qu'ils ne peuvent faire autrement (à cause d'un handicap moteur, d'une cécité ou de l'utilisation d'un poste qui n'est pas équipé d'une souris) ? :roll:

Le mieux est que tu renonces à ton idée : la soumission d'un formulaire doit pouvoir s'effectuer aussi bien à la souris qu'au clavier. C'est une question d'accessibilité.

Eléphanteau du PHP | 16 Messages

11 janv. 2010, 11:02

oui je suis tout à fait d'accort avec toi mais il s'agit d'une application interne que peut de gens utiliserons.
YpLee

Mammouth du PHP | 661 Messages

11 janv. 2010, 13:37

Donc as tu testé de vérifier si le submit() est du ou non à la souris ...

[javascript]

var sub = function(event){
if(event.keyCode == 13)
event.stop();
}
[/javascript]

avec comme formulaire :
<form action="..." method="post" onsubmit="sub(event);">
...
</form>
cela dit, je rejoins l'idée de victor Brito !... c'est pas bien !... et j'en vois pas l'interet ...(à moins que ce soit pour éviter à des "..." d'envoyer le formulaire avant d'être aller jusqu'en bas ...)

max43
Invité n'ayant pas de compte PHPfrance

29 mai 2012, 14:46

J'ai essayé toute vos solution mais aucune ne semble fonctionner ^^.

Kolrik
Invité n'ayant pas de compte PHPfrance

28 juin 2012, 08:45

Bonjour,

Je pense avoir la solution, si j'ai bien compris le problème. (Je sais le sujet date mais ca peut aider d'autres)

ajoute un <form> avec ces attributs :
<form method='post' action='' onsubmit='tafonction();return false;'>

Au submit, (par enter ou par clic bouton ou encore à l'event submit()), "tafonction()" s'executera et le return false empêchera l'envoi du formulaire. :wink:
(Testé sur Internet Explorer, FireFox et GoogleChrome)