Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 触发文件上传输入元素不适用于Google Chrome_Javascript_File Upload - Fatal编程技术网

Javascript 触发文件上传输入元素不适用于Google Chrome

Javascript 触发文件上传输入元素不适用于Google Chrome,javascript,file-upload,Javascript,File Upload,我有一些截获文件上传输入元素上单击事件的代码。它与Internet Explorer配合得很好,但与Google Chrome不配合 为什么我要拦截点击事件?因为我需要确保用户在浏览选择任何要上载的文件之前保存了任何更改。在需要保存的情况下,我调用save函数,该函数返回一个承诺,然后再次触发相同的文件输入元素 html: <input type="file" name="files[]" data-bind="click: $root.fileUploadClick"> 使用Go

我有一些截获文件上传输入元素上单击事件的代码。它与Internet Explorer配合得很好,但与Google Chrome不配合

为什么我要拦截点击事件?因为我需要确保用户在浏览选择任何要上载的文件之前保存了任何更改。在需要保存的情况下,我调用save函数,该函数返回一个承诺,然后再次触发相同的文件输入元素

html:

<input type="file" name="files[]" data-bind="click: $root.fileUploadClick">
使用Google Chrome,当我调试时,我可以清楚地看到第一次触发了click元素,完成了保存调用,然后用$tgt重新触发了click。单击之后,浏览窗口不会显示

PS:如果hasChanges返回false,则它适用于所有浏览器。在这种情况下,浏览窗口将正确显示

有什么想法吗


谢谢。

出于安全和麻烦的原因,您不能伪造文件上传点击。只要在后台运行save,让onchange回调等待保存完成,然后再继续。你说得对,我将按照你的建议继续。谢谢
var fileUploadClick = function (data, event) {

    if (hasChanges()) {
        var promise = Q.all([save()]);
        return promise.then(success);
    }
    else {
        return true;
    }
    function success() {
        var tgt = event.currentTarget;
        $(tgt).click();
    };
};