我发现最简单的方法是手动触发事件:
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>