我发现最简单的方法是手动触发事件:
document.getElementById('test').value = 'bbb';
var evt = new CustomEvent('change');
document.getElementById('test').dispatchEvent(evt);
当以编程方式更改值时,仅监听change
事件很容易出错。但是由于您要更改值,因此添加两行并使用CustomEvent触发更改事件。
那么你就可以捕捉到这个change
事件,或者内联:
<input id="test" onchange="console.log(this)">
或与听众:
document.getElementById('test').addEventListener('change',function(event) {
console.log(event.target);
});
这样做的好处是,如果您有一个可以由用户更改的输入,您可以捕获这两个事件(来自用户或脚本)
然而,这取决于您自己以编程方式更改输入值的事实。如果您正在使用更改输入值的库(例如datepickr),您可能必须进入代码并将这两行添加到正确的位置。
现场演示:
// input node reference
const inputElem = document.querySelector('input')
// bind "change" event listener
inputElem.addEventListener('change', e => console.log(e.target.value))
// programatically change the input's value every 1 second
setInterval(() => {
// generate random value
inputElem.value = Math.random() * 100 | 0;
// simulate the "change" event
var evt = new CustomEvent('change')
inputElem.dispatchEvent(evt)
}, 1000);
<input>