如何以编程方式在输入上强制执行onchange事件?
我尝试过这样的东西:
var code = ele.getAttribute('onchange');
eval(code);
但我的最终目标是触发任何侦听器函数,这似乎不起作用。也不只是更新“value”属性。
发布于 2008-12-04 11:51:46
在jQuery中,我主要使用:
$("#element").trigger("change");
发布于 2008-09-25 23:18:33
由于某种原因,ele.onchange()在我的页面上的IE中抛出了一个“找不到方法”的异常,所以我最终从Kolten提供的链接中使用了这个函数,并调用了fireEvent(ele,'change'),这是有效的:
function fireEvent(element,event){
if (document.createEventObject){
// dispatch for IE
var evt = document.createEventObject();
return element.fireEvent('on'+event,evt)
}
else{
// dispatch for firefox + others
var evt = document.createEvent("HTMLEvents");
evt.initEvent(event, true, true ); // event type,bubbling,cancelable
return !element.dispatchEvent(evt);
}
}
但是,我创建了一个测试页面,确认调用onchange()应该有效:
<input id="test1" name="test1" value="Hello" onchange="alert(this.value);"/>
<input type="button" onclick="document.getElementById('test1').onchange();" value="Say Hello"/>
编辑: ele.onchange()不起作用的原因是我实际上没有为onchange事件声明任何东西。但fireEvent仍然可以正常工作。
发布于 2008-09-25 23:06:26
取自QUnit的底部
function triggerEvent( elem, type, event ) {
if ( $.browser.mozilla || $.browser.opera ) {
event = document.createEvent("MouseEvents");
event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
elem.dispatchEvent( event );
} else if ( $.browser.msie ) {
elem.fireEvent("on"+type);
}
}
当然,您可以将$.browser替换为您自己的浏览器检测方法,使其独立于jQuery。
要使用此函数:
var event;
triggerEvent(ele, "change", event);
这基本上会触发真正的DOM事件,就好像实际发生了什么变化一样。
https://stackoverflow.com/questions/136617
复制相似问题