我有一个非常基本的页面,其中包含<input type="file">
元素。当我提交选择了文件的表单时,服务器会回复一个在Excel中打开的电子表格(“新窗口”)。这种行为的含义是初始屏幕和输入元素在IE中仍然可见。如果我更改所选文件的磁盘上的数据并重新提交表单,Internet Explorer将再次上载旧内容;发送到服务器的内容中不存在我的最新更改。如果我再次通过输入的“浏览...”按钮选择文件,则会按预期上载新文件内容。 Firefox总是从磁盘发送文件的内容,这是预期/期望的行为。似乎Internet Explorer正在对上传的文件内容进行某种缓存。
有没有办法禁用这个“功能”并让IE每次提交表单时从磁盘中提取数据?
是否有关于此行为的文档?这是我第一次遇到它并且我的搜索很大程度上是空的。
答案 0 :(得分:4)
您可以使用live demos posted on MS-Connect测试猜想。
当实施FileList和Blob时,错误开始于IE10 input.files 是文件/ blob项目的html5文件列表 为了填充它,IE blob每个filepicker选择。他们有一个“快照状态”(W3C术语) 如果在提交之前更新了所选文件,它们将保持同步 问题是,IE无法检测文件是否被删除,重命名或替换 在这种情况下,filepicker快照变得陈旧。在提交文件选择器选择之前,在filepicker中选择文件,然后重命名和已编辑时会发生什么情况。尽管新文件(具有原始文件名)已替换为其位置,但原始文件(现在具有不同的 名称和修改后的文本)将在表单中发送。这怎么可能?它好像是通过ntfs ObjectID跟踪的,它与Distributed Link Tracking一起使用。请注意,在此屏幕截图中,文件 name 与内容文件不一致。
所以,它根本不是“缓存”的东西。这是一个跟踪错误。
答案 1 :(得分:0)
您是否尝试使用autocomplete
标记的input
属性?
例如
<input type="text" autocomplete="off" />
应强制{strong>值永远不会被重用,如W3C docs中所述:
autocomplete = on / off / default
- on - on状态表示该值不是特别敏感,用户可以期望能够依赖他的用户 代理人要记住他为该控件输入的值。
- 关闭 - 关闭状态表示控件的输入数据特别敏感(例如,a的激活码) 核武器);或者它是一个永远不会被重用的值 (例如,银行登录的一次性密钥),用户将 因此每次都必须明确输入数据,而不是 能够依靠UA为他预先填补价值;或者那个 该文档提供了自己的自动完成机制,但没有 希望用户代理提供自动完成值。
答案 2 :(得分:0)
我在IE 10,11中遇到了同样的问题。我可以使用下面的代码修复它
var file = $('input[type="file"]');
file.removeAttr('value');
var cloneFile = file.clone();
file.parent().get(0).replaceChild(cloneFile.get(0), file.get(0));
如果您要获取多个文件对象,请在选择器之后使用eq(-2)
$('input[type="file"]').eq(-2);
如有任何问题,请评论我。
答案 3 :(得分:-1)
我自己没有尝试过,但您可能想尝试在表单操作中使用虚拟参数,并在每次提交操作之前更改其值。例如,如果您有<form action="foo.php">
,请将其更改为<form action="foo.php?dummy=0">
,然后使用javascript将操作部分更改为例如在每次提交之前action="foo.php?dummy=1"
等等。