ファイルアップロードの入力要素でクリックイベントをインターセプトするコードがあります。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 を返すと、すべてのブラウザで動作します。この場合、ブラウズ ウィンドウは正しく表示されます。
何か案が?
ありがとう。