使用按钮,我可以调用它们上的click()
方法生成一个点击。但是,DIV在所有浏览器上都没有此方法。然而,我可以将click事件侦听器附加到它们(通过设置.onclick="..."
或添加事件侦听器)。
有没有办法让我以编程方式“合成”对这样一个元素的点击,但不使用jQuery ?理想情况下,这不取决于注册的侦听器的特定方式(因此简单地调用eval(div.onclick)
对我不起作用),并且适用于所有现代浏览器。
(好奇的是,我需要这个用于自动化测试,而不是欺骗用户。)
答案 0 :(得分:5)
我最近在我的库中编写了一个函数,可以在GitHub存储库here中找到它。
它完全是跨浏览器,并在选择器引擎返回的元素上触发指定的事件。我相信你将能够从中提取所需的代码。
如果没有,这就是你需要的。用元素替换元素。并输入事件类型,在本例中为click
。
// Check for createEventObject
if(document.createEventObject){
// Trigger for Internet Explorer
trigger = document.createEventObject();
element.fireEvent('on' + type, trigger);
}
else {
// Trigger for the good browsers
trigger = document.createEvent('HTMLEvents');
trigger.initEvent(type, true, true);
element.dispatchEvent(trigger);
}
以下是一个示例实现。
function simulateEvent(element, type) {
// Check for createEventObject
if(document.createEventObject){
// Trigger for Internet Explorer
trigger = document.createEventObject();
element.fireEvent('on' + type, trigger);
}
else {
// Trigger for the good browsers
trigger = document.createEvent('HTMLEvents');
trigger.initEvent(type, true, true);
element.dispatchEvent(trigger);
}
}
答案 1 :(得分:3)
如果您的浏览器与DOM兼容,则可以使用DIV元素的dispatchEvent(evt)
方法。
有关详情,请参阅dom w3c spec。