我一直在使用明显的:
/*Place the file into the editing image */
$j("#file").change(function(e) {
type="upload";
submitChanges("preview");
});
submitChanges函数基本上通过“单击”提交(隐藏)来提交表单。使用AJAX表单插件监视表单。提交工作正常,与问题无关,但这只是为了给你一个背景。
使用Firefox和IE8一切正常。如果用户选择了一个文件AJAX,那就是它。用户可以再次单击“浏览”并选择新文件或同一文件,更改将再次触发。
问题出在基于Webkit的浏览器(Chrome和Safari)上,只有当用户选择的文件不同于之前选择的文件时,才会触发更改事件。这些浏览器精确地解释变化。由于选择了相同的文件这个事件未被触发,因此该框没有改变。我想模仿IE和Firefox的功能,无论选择什么文件,都会触发此事件。
任何解决方案?
请求的HTML:
<table border="0" style="width:100%">
<tbody>
<tr>
<td style="width:50%"><input id="preview" type="button" value="Preview"/></td>
<td><input type="button" id="save" value="Save" /></td>
</tr>
<tr>
<td style="width:50%">Upload (JPEG Only):</td>
<td><form id="uploadForm" class="upload" method="POST" enctype="multipart/form-data" action="/path/to/file.php?action=preview"><input type="file" name="file" id="file" /><input type="submit" id="uploadSubmit" style="display:none" /><div id="hiddenFields"><!-- JQUERY --></div></form></td>
</tr>
</tbody>
</table>
答案 0 :(得分:2)
我知道这有点像黑客,但可能是一个临时解决方案。
即使用户选择了同一个文件也会触发更改事件,请在完成所需操作后清理该字段。
$("#file").on('change', function(e) {
type = "upload"
submitChanges("preview")
$(this).val('')
})
看到它在这里工作:http://jsfiddle.net/RASG/2rrqv/
使用Chrome 21和FF 15测试。
对于IE,这里还有另一个“黑客”:Why doesn't IE reset file input field?