Javascript dispatchEvent点击在IE9和IE10中不起作用 [英] Javascript dispatchEvent click is not working in IE9 and IE10
问题描述
我正在尝试模拟鼠标事件,如点击,鼠标悬停等。我使用下面的代码来模拟点击,
I'm trying to simulate mouse events like click, mouseover etc on app build in ExtJs. I'm using below code to simulate click,
function triggerEvent(element, eventName)
{
if (document.createEvent)
{
var evt = document.createEvent('MouseEvents');
evt.initEvent(eventName, true, true);
return element.dispatchEvent(evt);
}
}
var btn = document.getElementById("loginButton");
triggerEvent(btn, "click");
这在Chrome和Firefox上工作正常,但从未在IE9和IE10上工作。如果我使用btn.fireEvent('onlclick'),那么它在IE9中工作正常(IE10中未检查)。 IE9& ...支持document.createEvent IE10但我不知道为什么我的代码不工作。
This works fine on chrome and firefox but never works on IE9 and IE10. If I use btn.fireEvent('onlclick') then it works fine in IE9 (not checked in IE10). document.createEvent is supported in IE9 & IE10 but I'm not sure why my code is not working.
推荐答案
我曾经在自定义事件中遇到了同样的问题,并使用其他问题中的代码解决了:
不使用库的IE中的自定义事件
I have had the same issue with custom events some time ago and solved by using the code found in this other question: Custom events in IE without using libraries
其实你不需要使用所有的代码,它们是3的功能,用作浏览器兼容的包装器。
Actually you don't need to use all the code, they are 3 function to use as wrapper for browser compatibility.
但是我也建议你使用.click方法来更容易地解决你的问题(至少在正常点击下)
http://www.w3schools.com/jsref/met_html_click.asp
But I also suggest you to use the .click method which would solve your problem more easily (at least for normal click) http://www.w3schools.com/jsref/met_html_click.asp
所以只要做
document.getElementById("loginButton").click();
我将这个代码粘贴到 sergey gospodarets 从另一个问题,这可能是有用的。
I am pasting here the code by sergey gospodarets from the other question, which could be useful.
function triggerEvent(el,eventName){
var event;
if(document.createEvent){
event = document.createEvent('HTMLEvents');
event.initEvent(eventName,true,true);
}else if(document.createEventObject){// IE < 9
event = document.createEventObject();
event.eventType = eventName;
}
event.eventName = eventName;
if(el.dispatchEvent){
el.dispatchEvent(event);
}else if(el.fireEvent && htmlEvents['on'+eventName]){// IE < 9
el.fireEvent('on'+event.eventType,event);// can trigger only real event (e.g. 'click')
}else if(el[eventName]){
el[eventName]();
}else if(el['on'+eventName]){
el['on'+eventName]();
}
}
function addEvent(el,type,handler){
if(el.addEventListener){
el.addEventListener(type,handler,false);
}else if(el.attachEvent && htmlEvents['on'+type]){// IE < 9
el.attachEvent('on'+type,handler);
}else{
el['on'+type]=handler;
}
}
function removeEvent(el,type,handler){
if(el.removeventListener){
el.removeEventListener(type,handler,false);
}else if(el.detachEvent && htmlEvents['on'+type]){// IE < 9
el.detachEvent('on'+type,handler);
}else{
el['on'+type]=null;
}
}
var _body = document.body;
var customEventFunction = function(){
alert('triggered custom event');
}
// Subscribe
addEvent(_body,'customEvent',customEventFunction);
// Trigger
triggerEvent(_body,'customEvent');
这篇关于Javascript dispatchEvent点击在IE9和IE10中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!