1

我一直在使用明显的:

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

1 回答 1

2

我知道这有点小技巧,但可能是一个临时解决方案。

即使用户选择了相同的文件,也要触发更改事件,请在完成所需的所有操作后清理该字段。

$("#file").on('change', function(e) {
    type = "upload"
    submitChanges("preview")
    $(this).val('')
})

看到它在这里工作:http: //jsfiddle.net/RASG/2rrqv/

使用 Chrome 21 和 FF 15 进行测试。

对于 IE,这里还有另一个“hack”:为什么 IE 不重置文件输入字段?

于 2012-10-11T13:19:49.860 回答