ページにフォームがあります。
<form action="form/submit" method="post">
<button type="submit">Submit</button>
</form>
IEの古いバージョンを含むすべてのブラウザーで機能しますが、IE11では失敗しますが、タブが継続的なロードループでスタックし、送信後に「ありがとう」ページに変更されることはありません。ただし、コンソールを開くと機能します。
Console.logの問題を知っていますIEが持っており、すでに使用しています:
if (!window.console) {
console = {
log: function() {}
};
}
それを避けるために、それはうまくやっているようです(言及したように、他のすべてのIEは動作します)。問題がどこにあるかについての洞察はありますか?
この問題は、フォームにname
属性のない(または入力要素がない)入力要素しかない場合に発生します。ここでバグへの参照を見つけましたが、リンクが主張するように、メトロモードだけでなくデスクトップモードでも発生します。
修正方法は、フォームを送信する前に、ダミーの<input type="hidden" name="dummy" value="something">
フィールドを(名前と値を設定して)作成することです。
このバグは、IE11が提供するすべての互換モードで発生します。
私はこのバグにあまりにも多くの時間を費やしました。クレイジーな部分は、開発ツール(f12)を開いている場合、IE11がフォーム送信を許可することです。これは、送信ボタンの前に置いたものです。
<input type="hidden" name="ie11sux" id="ie11sux" value="<?php echo md5(microtime()."ie11sux"); ?>"/>
IE11のバグです。次のように、ボタンに名前属性を追加すると修正できます。
<button type="submit" name="foo" ...
名前付き要素のないフォームは、IE11 + W8.1での送信時に無限ループになります。これを修正するには、属性nameをボタンに追加するだけです:
<form action="form/submit" method="post">
<input type="submit" name="cm" value="Submit">
</form>
これはOPの質問に直接関係しませんが、IEのみのフォーム送信の問題です。
送信イベント中にform.prop('disabled', true)
を設定した場合、他のブラウザはフォームデータを送信しますが、IEは送信しません-空のリクエストボディを送信します。
私にとって、必須とマークされた空の非表示フィールドがありました。かなり愚かですが、それは私のために働いた解決策でした。
IE11の場合:
event.returnValue = false;
Event.preventDefaultが存在するかどうかを確認して、最終的なエラーを防止します。
event.preventDefault ? event.preventDefault() : (event.returnValue = false);