1
クロスブラウザのJavaScriptでは、テキストがドラッグされてフィールドにドロップされたために<input>
要素の値が変更された後にイベントを取得する方法はありますか?ドロップ時に値変更イベントを入力要素に入力
input.addEventListener("change", cb); // Is not triggered on drop
input.addEventListener("drop", cb); // Is triggered before the value change
問題を実証するためのスニペット:
let input = document.getElementById('input');
let button = document.getElementById('button');
let div = document.getElementById('div');
function log(msg) {
\t let el = document.createElement('pre');
\t el.textContent = msg;
\t div.appendChild(el);
}
input.addEventListener("change", function() {
\t log("CHANGE: " + input.value);
});
input.addEventListener("keyup", function() {
\t log("KEYUP: " + input.value);
});
input.addEventListener("drop", function() {
\t log("DROP: " + input.value);
});
button.addEventListener("click", function() {
\t log("CLICK: " + input.value);
});
log("Try dragging text into the input field");
<input id="input"></input>
<button id="button">Click</button>
<div id="div"></div>
Chromeで少なくとも動作する回避策を見つけました。読み取り前に 'setTimeout(cb、0)' on * drop *をトリガーすることです。 – ANisus
setTimeoutを使用して回避策を試しましたが、これもfirefoxで動作しています –