1

ファイルアップロードの入力要素でクリックイベントをインターセプトするコードがあります。Internet Explorer では問題なく動作しますが、Google Chrome ではうまく動作しません。

クリック イベントをインターセプトするのはなぜですか? アップロードするファイルを参照して選択する前に、ユーザーが変更を保存したことを確認する必要があるためです。保存する必要がある場合は、save 関数 (Promise を返す) を呼び出してから、同じファイル入力要素を再度トリガーします。

html:

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

ジャバスクリプト:

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

$(tgt).click()Google Chrome を使用してデバッグすると、最初にクリック要素がトリガーされ、保存の呼び出しが行われ、次にクリックが再トリガーされ、ブラウズ ウィンドウが表示されないことがはっきりとわかります。

hasChanges()PS: false を返すと、すべてのブラウザで動作します。この場合、ブラウズ ウィンドウは正しく表示されます。

何か案が?

ありがとう。

4

0 に答える 0