2011-03-01 62 views
4

使用按钮,我可以调用其上的click()方法来生成点击。但是DIV在所有浏览器上都没有这种方法。然而,我可以将点击事件监听器附加到它们上(通过设置.onclick="..."或添加事件监听器)。如何合成DIV元素上的浏览器单击事件?

有没有什么办法让我通过编程方式“合成”这样一个元素的点击,但是没有使用jQuery?理想情况下,这不会依赖于注册的听众的具体方式(所以简单地调用eval(div.onclick)不适用于我),并且可以在所有现代浏览器中工作。

(对于好奇,我需要这个自动测试,不欺骗用户。)

+0

如果点击不起作用,那么可以使用onmousedown/onmouseup作为解决方法。如果没有这些,标准拖放'拖放库不起作用。 – 2011-03-01 20:17:31

+0

所以 - 让我直截了当 - 你想跨浏览器的JavaScript - 并不想使用jQuery?你要么为失败而努力,要么努力工作。 – wiifm 2011-03-01 20:19:16

+0

为什么eval(div.onclick)不适合你? – 2011-03-01 20:31:07

回答

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); 
    } 
} 
+0

谢谢!这正是我所期待的。 – levik 2011-03-01 21:20:15

+0

干得好!谢谢! – smirkingman 2011-04-07 10:53:47

3

如果浏览器的DOM兼容,你可以使用DIV元素的dispatchEvent(evt)方法。请致电。

+0

“DOM兼容”是否包含任何版本的IE? – levik 2011-03-01 21:19:52

+0

不是。那么我知道任何低于IE9的东西都不支持它。我不确定IE9的情况,但它可能确实如此(手指穿过微软这一次是正确的!)。 – Olical 2011-03-01 21:27:40

相关问题