如何手动触发onchange事件?

我正在通过日历小部件设置日期时间文本字段值。显然,日历小部件是这样做的:

document.getElementById('datetimetext').value = date_value;
我想要的是:
在日期-时间文本框中改变值,我需要重置页面中的其他一些字段。我已经添加了一个onchange事件监听器到datetimetext字段,它没有被触发,因为我猜onchange只在元素获得焦点&时被触发;该值在失去焦点时改变

因此,我正在寻找一种方法来手动触发这个onchange事件(我猜应该负责检查文本字段中的值差异)。

什么好主意吗?

738985 次浏览

有几种方法可以做到。如果onchange监听器是一个通过element.onchange属性设置的函数,并且你不担心事件对象或起泡/传播,最简单的方法是直接调用该函数:

element.onchange();

如果你需要它完全模拟真实的事件,或者如果你通过HTML属性或addEventListener/attachEvent设置事件,你需要做一些功能检测来正确地触发事件:

if ("createEvent" in document) {
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
element.dispatchEvent(evt);
}
else
element.fireEvent("onchange");

中数表明在现代浏览器中有一种更干净的方法:

// Assuming we're listening for e.g. a 'change' event on `element`


// Create a new 'change' event
var event = new Event('change');


// Dispatch it.
element.dispatchEvent(event);