次のことを達成するために、この jQuery + html を「作成」しました。
ユーザーがクリックできるプレースホルダー画像があり、ファイル選択ダイアログが開きます。ファイルが選択されると、対応するマルチパート フォームがサーバーにアップロードされます。このファイルのアップロードで AJAX の動作を模倣しようとしているので、サーバーの応答を受信するために非表示の iframe も使用しています。
問題を説明しやすいように、最初にコードを示します。
jQuery("#myInput").change(function () { // Submit form upon file selection
// alert("myInput.val() = " + $('#myInput').val()); // alert 1
$('#form1').submit();
// alert("myInput.val() = " + $('#myInput').val()); // alert 2
});
<form id="form1" action="/do_upload.php" method="post" enctype="multipart/form-data" target="target_frame">
<input id="myInput" type="file" name="userfile" /><br>
</form>
<img src="/img/placeholder.png" onclick="$('#myInput').click();" >
<iframe id="target_frame" name="target_frame" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
コードは、新しい Chrome/Firefox/Safari で完全に動作します。visibility: hidden;
(興味深いことに、 をオンにしても機能しmyInput
ます。したがって、セキュリティ上の懸念はあまりないようです)。ただし、IE 9 と 10 はどちらも同じ動作を示します。画像をクリックするとダイアログが正常に表示され、ファイル パスは「アラート 1」では正しく設定されていますが、「アラート 2」では設定されておらず、フォームが送信されません。 . 一方、参照ボタンを直接クリックすると、myInput
適切にダイアログが表示され、フォームが送信されます。
この動作がどのように可能になるのか、私は完全に混乱しています! 迷惑なIEを撃退する方法についての提案は大歓迎です:)