如何手动触发onchange事件?

我正在通过日历小部件设置date时间文本框的值。 显然,日历小部件就是这样的:

document.getElementById('datetimetext').value = date_value; 

我想要的是:在更改date时间文本框中的值我需要重置页面中的其他字段。 我已经添加了一个onchange事件监听器的datetimetext字段是不会被触发,因为我猜onchange只有当元素获得焦点触发,其价值改变失去焦点。

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

有任何想法吗 ?

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

 element.onchange(); 

如果您需要完全模拟真实事件,或者通过html属性或addEventListener / attachEvent设置事件,则需要执行一些function检测以正确触发事件:

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

MDNbuild议,在现代浏览器中有这样一种更简洁的方法:

 // Assuming we're listening for eg a 'change' event on `element` // Create a new 'change' event var event = new Event('change'); // Dispatch it. element.dispatchEvent(event); 

对于那些使用jQuery的人来说,有一个方便的方法: http : //api.jquery.com/change/