1

我有一些代码可以拦截文件上传输入元素上的点击事件。它适用于 Internet Explorer,但不适用于 Google Chrome。

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

的HTML:

<input type="file" name="files[]" data-bind="click: $root.fileUploadClick">

的JavaScript:

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();
    };
};

使用谷歌浏览器,当我调试时,我可以清楚地看到第一次触发 click 元素,调用保存完成,然后重新触发点击,$(tgt).click()然后不显示浏览窗口。

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

任何想法?

谢谢。

4

0 回答 0