J'ai un formulaire sur une page, quelque chose de simple comme:
<form action="form/submit" method="post">
<button type="submit">Submit</button>
</form>
Cela fonctionne dans tous les navigateurs, y compris les anciennes versions d'IE, MAIS dans IE11, il échoue, l'onglet étant bloqué dans une boucle de chargement continu, il ne passe jamais à la page de remerciement après la soumission. CEPENDANT, si j'ouvre la console, cela fonctionne.
Je connais les problèmes de console.log IE, et j'utilise déjà:
if (!window.console) {
console = {
log: function() {}
};
}
pour l'éviter, ce qui semble bien se passer (comme mentionné, tous les autres IE fonctionnent). Avez-vous un aperçu du problème?
Le problème se produit lorsqu'un formulaire ne contient que des éléments d'entrée sans attribut name
(ou aucun élément d'entrée). J'ai trouvé une référence au bogue ici, bien que cela se produise aussi en mode bureau et pas seulement en mode métro comme le prétend le lien:
Le correctif consiste à créer un champ factice <input type="hidden" name="dummy" value="something">
(avec un nom et une valeur définis) avant de soumettre le formulaire.
Le bogue survient dans tous les modes de compatibilité proposés par IE11.
Je viens de passer beaucoup trop de temps sur ce bug. La partie folle est que IE11 autorise la soumission du formulaire si les outils de développement (f12) sont ouverts. Voici ce que je mets avant mon bouton d'envoi:
<input type="hidden" name="ie11sux" id="ie11sux" value="<?php echo md5(microtime()."ie11sux"); ?>"/>
C'est un bug dans IE11. Vous pouvez résoudre ce problème si vous ajoutez un attribut de nom au bouton, par exemple:
<button type="submit" name="foo" ...
Un formulaire sans élément nommé entraînera une boucle infinie sur submit sur IE11 + W8.1. Pour résoudre ce problème, ajoutez simplement un attribut name au bouton:
<form action="form/submit" method="post">
<input type="submit" name="cm" value="Submit">
</form>
Cela ne concerne pas directement la question d'OP, mais constitue un problème de soumission de formulaire uniquement pour IE:
Si vous définissez form.prop('disabled', true)
lors de l’événement submit, d’autres navigateurs continueront à envoyer les données du formulaire, mais IE n’enverra pas - il enverra un corps de requête vide.
Pour moi, j'avais des champs cachés vides qui étaient marqués comme requis. Assez stupide mais c’est la solution qui a fonctionné pour moi.
Pour IE11, il y a:
event.returnValue = false;
Vérifier si event.preventDefault existe empêche une éventuelle erreur:
event.preventDefault ? event.preventDefault() : (event.returnValue = false);