我正在通过日历小部件设置日期时间文本字段值。显然,日历小部件的功能如下:
document.getElementById('datetimetext').value = date_value;
我想要的是:
在更改日期时间文本字段中的值时,我需要重置页面中的其他一些字段。我已经在datetimetext字段中添加了一个onchange事件监听器,该监听器没有被触发,因为我猜onchange
仅在元素获得焦点时被触发。失去焦点后,它的价值就会改变。
因此,我正在寻找一种手动触发此onchange
事件的方法(我猜应该注意检查文本字段中的值差异)。
有什么想法吗?
答案 0 :(得分:410)
有几种方法可以做到这一点。如果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");
答案 1 :(得分:270)
MDN表明在现代浏览器中有更清晰的方法:
// 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);
答案 2 :(得分:14)
对于那些使用jQuery的人来说,有一种方便的方法:http://api.jquery.com/change/