检测文件选择jQuery

时间:2012-10-10 19:23:59

标签: javascript jquery ajax file

我一直在使用明显的:

    /*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>

1 个答案:

答案 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?