使用jQuery在IE10中动态提交文件上传表单
Dynamically submitting a file upload form in IE10 using jQuery
我有一个表单,它的唯一目的是上传文件,但出于用户体验的原因,我需要一个漂亮的按钮:
- 加载文件对话框
- 在文件被选中时自动提交表单
最初的解决方案类似于这个JSFiddle,其中您有一个链接,加载文件对话框,然后监听对话框的change
事件以自动提交表单:
$("input[type=file]").on("change", function () {
// auto-submit form
$("form").submit();
});
$("#my-nice-looking-button").on("click", function (e) {
e.preventDefault();
// load file dialog
$("input[type=file]").trigger("click");
});
如果你试着摆弄,它可以在IE9, Chrome, Firefox等中工作,但它不能在Internet Explorer 10中工作。所有的JavaScript功能都可以工作,包括触发表单的submit
事件。但是,浏览器从不向服务器发送表单数据;它就在那儿。
是否有一些安全保护措施或文件上传限制内置到IE10,阻止这工作?
事实证明,是的,IE10不允许您以编程方式加载文件对话框和在文件对话框上的change
事件后自动提交表单。大概其中一个会起作用,而不是两个都起作用。除了我自己的实验,我还没有找到任何文件来支持这一说法。
我找到的解决方案是使用CSS样式文件对话框的按钮,这样它是不可见的,但放置在好看的按钮的顶部,所以当你认为你点击按钮,你实际上点击了文件对话框的"选择"按钮:
input[type=file] {
/* positioning strategies will vary depending on design */
font-size: 25px;
position: relative;
top: -50px;
left: -10px;
/* make it invisible! */
opacity: 0;
/* make the cursor act like it's hovering over an anchor tag */
cursor: pointer;
cursor: hand;
}
然后您只需要侦听change
事件并像以前一样提交表单:
$("input[type=file]").on("change", function () {
// auto-submit form
$("form").submit();
});
这样做意味着你正在"有机地"加载文件对话框,IE10允许它发生,并允许你自动提交表单。
此解决方案也适用于WebKit和Firefox。
相关文章:
- 如何使用WCF服务和javascript表单post上传.doc文件
- 在不同的文件中使用Javascript获取表单数据
- 有什么“;错误的”;将javascript放在asp.net表单上,而不是放在单独的文件中
- 用PHP发送html表单和文件附件
- 从表单中动态生成一个字符串,传递给通过AJAX加载的PHP文件
- Firefox,如何提交表单触发文件下载,但停留在网页上
- 使用node-js上传文件,并将表单信息存储在数据库(mysql)中
- html5拖放文件-在提交整个表单时上传
- ajax上传文件表单
- html表单,它有文本和表,现在我想在一个简单的文本文件中保存和检索数据,如何实现它
- 通过javascript将文件从html表单发送到php
- 通过javascript获取pdf文件的表单数据
- 如果从文件输入按钮调用 .ajaxSubmit() 时,它是必需的表单
- 选择文件(表单提交)后无法单击“取消”按钮
- 在 Angular2 中构建多部分/表单数据 POST 请求并验证输入类型文件
- 在引导程序中从 HTML 表单执行 Python (CGI) 文件.带有Apache Server的JS
- 带有远程 => true 的 Rails 表单提交 -- JS 文件呈现但不执行
- 在用户编辑配置文件表单中使用ajax打开Facebox
- 使用JavaScript填写输入文件表单
- 通过jquery上传文件.表单插件