如何在DIV元素上合成浏览器单击事件?

时间:2011-03-01 20:15:22

标签: javascript dom browser dom-events

使用按钮,我可以调用它们上的click()方法生成一个点击。但是,DIV在所有浏览器上都没有此方法。然而,我可以将click事件侦听器附加到它们(通过设置.onclick="..."或添加事件侦听器)。

有没有办法让我以编程方式“合成”对这样一个元素的点击,但不使用jQuery ?理想情况下,这不取决于注册的侦听器的特定方式(因此简单地调用eval(div.onclick)对我不起作用),并且适用于所有现代浏览器。

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

2 个答案:

答案 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