如何检测inputtypes=文件“更改”为同一个文件?
我想在用户select一个文件时触发一个事件。 这样做与.change
事件一起工作,如果用户每次更改文件。
但是,如果用户再次select相同的文件,我想要触发事件。
- 用户select文件
A.jpg
(事件触发) - 用户select文件
B.jpg
(事件触发) - 用户select文件
B.jpg
(事件不会启动,我想让它启动)
我该怎么做?
你可以欺骗它。 删除文件元素并将其添加到change
事件的相同位置。 它会擦除文件path使其每次都可以改变。
例如jsFiddle。
或者你可以简单地使用.attr("value", "")
, 在jsFiddle上看到这个例子 。
如果你已经尝试.attr("value", "")
,并没有工作,不要恐慌(像我一样)
只是做.val("")
,而且会正常工作
我得到这个工作,通过清除文件input值onClick,然后发布onChange文件。 这允许用户连续两次select相同的文件,并且仍然将更改事件触发到服务器。 我的例子使用jQuery表单插件 。
$('input[type=file]').click(function(){ $(this).attr("value", ""); }) $('input[type=file]').change(function(){ $('#my-form').ajaxSubmit(options); })
这为我工作
<input type="file" onchange="function();this.value=null;return false;">
你不能在这里change
火力(正确的行为,因为没有改变)。 但是,你也可以绑定click
…虽然这可能会太频繁…两个之间没有太多的中间地带,虽然。
$("#fileID").bind("click change", function() { //do stuff });
如果你不想使用jQuery
<form enctype='multipart/form-data'> <input onchange="alert(this.value); return false;" type='file'> <br> <input type='submit' value='Upload'> </form>
它在Firefox中工作正常,但对于Chrome,您需要添加this.value=null;
警惕之后。
您可以使用form.reset()
来清除文件input的files
列表。 这会将所有字段重置为默认值,但在很多情况下,您可能只是在表单中使用inputtype ='file'来上传文件。 在这个解决scheme中,不需要再次克隆元素并重新挂钩事件。
感谢philiplehmann
那么,我有同样的问题。 我使用“input”(或input)事件,而不是改变,它的工作就像魅力。