75 votes

La touche ENTER d'un FORMULAIRE avec un seul champ de saisie entraîne automatiquement l'envoi de la commande GET.

Pourquoi un formulaire comportant un seul champ de saisie est-il rechargé lorsque l'utilisateur saisit une valeur et appuie sur la touche Entrée, alors qu'il ne l'est pas si le formulaire comporte deux champs ou plus ? J'ai écrit une page simple pour tester cette bizarrerie.

Si vous entrez une valeur dans le deuxième formulaire et appuyez sur Entrée, vous verrez qu'il recharge la page en passant la valeur entrée comme si vous aviez appelé GET. pourquoi ? et comment puis-je l'éviter ?

http://testformenter.html?partid=123

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>testFormEnter</title>
</head>
<body>
<form>
  <input type="text" name="partid2" id="partid2" />
  <input type="text" name="partdesc" id="partdesc"  />
</form>
  <p>2 field form works fine</p>
<form>
<input type="text" name="partid" id="partid"  />
</form>
<p>One field form reloads page when you press the Enter key why</p>
</body>
</html>

50voto

Mitchel Sellers Points 38352

Il s'agit d'une "bizarrerie" peu connue qui existe depuis un certain temps. Je sais que certaines personnes l'ont résolu de diverses manières.

Le contournement le plus simple, à mon avis, est d'avoir simplement une deuxième entrée qui n'est pas affichée à l'utilisateur. Bien que ce ne soit pas très convivial en arrière-plan, cela permet de résoudre le problème.

Je dois noter que l'endroit le plus courant où j'entends parler de ce problème est avec IE spécifiquement et non avec FireFox ou d'autres. Bien que cela semble les affecter également.

49voto

Vineet Reynolds Points 40529

Il s'agit d'un bogue connu dans IE6/7/8 . Il semble que vous n'aurez pas de solution à ce problème.

Le meilleur moyen de contourner ce problème est d'ajouter un autre champ caché (si votre conscience technique vous le permet). IE ne soumet plus automatiquement un formulaire lorsqu'il constate que celui-ci contient deux champs de type "entrée".

Mise à jour

Au cas où vous vous demanderiez pourquoi c'est le cas, cette perle sort tout droit de l'encyclopédie de l'UE. Spécification HTML 2.0 (section 8.2) :

Lorsqu'il n'y a qu'un seul champ de saisie de texte d'une seule ligne dans un formulaire, le l'agent utilisateur doit accepter la saisie dans ce champ comme une demande d'envoi de le formulaire.

7voto

bobince Points 270740

L'appui sur la touche Entrée fonctionne différemment selon (a) le nombre de champs et (b) le nombre de boutons d'envoi. Il se peut qu'elle ne fasse rien, qu'elle soumette le formulaire sans bouton d'envoi "réussi", ou qu'elle fasse comme si le premier bouton d'envoi avait été cliqué (générant même un onclick pour lui !) et soumette le formulaire avec la valeur de ce bouton.

Par exemple, si vous ajoutez un input type="submit" à votre formulaire à deux champs, vous remarquerez qu'il se soumet aussi.

Il s'agit d'une ancienne bizarrerie du navigateur, qui remonte au moins au début de Netscape (peut-être plus loin), et qui a peu de chances d'être modifiée aujourd'hui.

<form>

Invalide sans "action". Si vous n'avez pas l'intention de soumettre un formulaire et que vous n'avez pas besoin de regrouper les noms des boutons radio, vous pouvez tout simplement omettre l'élément de formulaire.

7voto

JeffJak Points 534

Voici le code que j'utiliserais pour résoudre le problème :

<form>
<input type="text" name="partid" id="partid"  />
<input type="text" name="StackOverflow1370021" value="Fix IE bug" style="{display:none}" />
</form>

3voto

Andy Hume Points 15186

Il ne s'agit pas de recharger la page en tant que telle, mais de soumettre le formulaire.

Toutefois, dans cet exemple, comme le formulaire ne comporte pas d'attribut d'action, il se soumet à lui-même, ce qui donne l'impression de recharger la page.

De plus, je n'arrive pas à reproduire le comportement que vous décrivez. Si je me trouve dans une entrée de texte d'un formulaire et que j'appuie sur Entrée, le formulaire est soumis, quel que soit l'endroit du formulaire où se trouve l'entrée ou le nombre d'entrées.

Vous pouvez essayer d'utiliser d'autres navigateurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X