Tout d'abord, il n'est pas nécessaire de joindre manuellement un événement pour soumettre un formulaire lorsque l'utilisateur appuie sur la touche enter - le navigateur s'en occupe déjà.
Curieusement, cela était dû à l'ordre des éléments, aux associations implicites de formulaires, ainsi qu'au fait qu'IE traite les boutons comme des éléments de soumission.
Essayez d'intervertir l'ordre de ces boutons pour voir ce que je veux dire :
<input type="text" />
<input type="submit" value="Submit" />
<button>Some button</button>
Naturellement, le navigateur a déjà reçu l'instruction d'écouter pour répondre à l'élément Enter sur une entrée de texte. Il en résulte que le navigateur en cliquant sur le bouton d'envoi associé. De plus, puisque vous n'avez pas explicitement fourni un nom de domaine de type form
ou des éléments associés entre eux par l'intermédiaire de leurs form
le navigateur tente d'établir cette relation pour vous.
Dans votre code, le <button>
est supposé être le bouton d'envoi de l'entrée de texte (parce que c'est le premier bouton d'envoi du formulaire implicite). Ainsi, chaque fois que vous appuyez sur Enter sur l'entrée de texte, le navigateur déclenche naturellement l'événement de clic du bouton associé.
Si vous réorganisez les éléments, comme je l'ai fait ci-dessus, c'est le contraire qui se produit. IE associe l'autre <input>
avec la zone de texte. Et en appuyant sur Enter sur la zone de texte déclenche implicitement l'événement de clic sur l'entrée submit.
Vous pouvez confirmer ce comportement en comparant les .form
attributs de divers éléments. Par exemple, l'ajout de id
Les valeurs nous permettront d'y accéder plus facilement :
<button id="fiz">Some Button</button>
<input id="foo" type="text" />
<input id="bar" type="submit" value="Submit" />
Puis faites quelques comparaisons rapides :
var button = document.getElementById("fiz");
var text = document.getElementById("foo");
var submit = document.getElementById("bar");
button.form === text.form; // true
submit.form === text.form; // true
button.form === submit.form; // true
Au final, c'est donc à vous de lever l'ambiguïté entre les deux boutons, en déclarant l'option <button>
élément à être type='button'
ou en le plaçant après le bouton d'envoi prévu.