ファイル選択ダイアログボックスで[キャンセル]が選択されていることを検出する方法がないことがわかりました。 onchange
またはonblur
を使用して、ファイルが選択されているか、何かが入力value
に追加されているかどうかを確認できます。
これは、次のようになります。https://jsfiddle.net/Twisty/j18td9cs/
HTML
<form>
Select File:
<input type="file" name="test1" id="testFile" />
<button type="reset" id="pseudoCancel">
Cancel
</button>
</form>
JavaScriptを私は、フォームをリセットまたはクリアし、独自のキャンセルまたはリセットボタンを作る示唆
var inputElement = document.getElementById("testFile");
var cancelButton = document.getElementById("pseudoCancel");
var numFiles = 0;
inputElement.onclick = function(event) {
var target = event.target || event.srcElement;
console.log(target, "clicked.");
console.log(event);
if (target.value.length == 0) {
console.log("Suspect Cancel was hit, no files selected.");
cancelButton.onclick();
} else {
console.log("File selected: ", target.value);
numFiles = target.files.length;
}
}
inputElement.onchange = function(event) {
var target = event.target || event.srcElement;
console.log(target, "changed.");
console.log(event);
if (target.value.length == 0) {
console.log("Suspect Cancel was hit, no files selected.");
if (numFiles == target.files.length) {
cancelButton.onclick();
}
} else {
console.log("File selected: ", target.value);
numFiles = target.files.length;
}
}
inputElement.onblur = function(event) {
var target = event.target || event.srcElement;
console.log(target, "changed.");
console.log(event);
if (target.value.length == 0) {
console.log("Suspect Cancel was hit, no files selected.");
if (numFiles == target.files.length) {
cancelButton.onclick();
}
} else {
console.log("File selected: ", target.value);
numFiles = target.files.length;
}
}
cancelButton.onclick = function(event) {
console.log("Pseudo Cancel button clicked.");
}
入力からの値。
)'すべてのブラウザで実行されていない、と呼ばれているイベントを探してください。あなたが探しているブラウザは具体的に動作していますか? – Twisty
このhttps://jsfiddle.net/Twisty/j18td9cs/でのいくつかのテストは、FFで、 'Cancel'はブラウザダイアログボックスの要素なので、ファイルが選択されているかどうかのみ確認できます。ファイルを選択して2回目のブラウズを行ってキャンセルを押すと、ファイルの値が保持されていることに気付きました。ページに独自のキャンセルボタンを作成できました。 'confirm()'や 'prompt()'のように、何かが更新されたかどうかを確認しようとしました。 – Twisty