我“精心制作”了这段 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 都显示相同的行为:单击图像成功弹出对话框,文件路径在“alert 1”中正确设置,但在“alert 2”中消失了,并且表单没有提交. 另一方面,直接点击myInput
正确的浏览按钮会弹出对话框并提交表单。
我对这种行为是怎么可能的感到非常困惑!任何关于如何对抗烦人的 IE 的建议将不胜感激:)