无法用addEventListener注册onclick

unable to register onclick with addEventListener

本文关键字:注册 onclick addEventListener      更新时间:2023-09-26

我只是想为div注册onclick,但它不起作用。相反,在页面加载时触发对alert的调用。

function print()
{
    alert(' div clicked..');
}

var divElement = document.getElementById("content");
divElement.addEventListener("onclick", print());

这是一个jsFiddle

问题是您需要on前缀。print 不应该有空括号。空括号将导致函数执行,其返回值将作为函数调用——这是而不是您想要的。

试试这个:

var divElement = document.getElementById("content");
divElement.addEventListener("click", print);

这是一个更新后的工作jsFiddle。


编辑:根据Ian下面的评论,这里有一个帮助函数,用于向后兼容某些版本的Internet Explorer。

function AttachEventListener(element, event, handler) {
    if (element.addEventListener) {
        element.addEventListener(event, handler, false);
    } else if (element.attachEvent) {
        element.attachEvent('on' + event, handler);
    } else {
        alert('Invalid element specified for AttachEventListener');
    }
}

不使用divElement.addEventListener("click", print),而使用AttachEventListener(divElement, 'click', print)

使用辅助函数的主要原因是旧版本的Internet Explorer 不具有 addEventListener,而在使用attachEvent时需要 on前缀。这个辅助函数将为您省去对每个事件绑定进行特性检查的麻烦。

你应该这样写:

divElement.addEventListener("click", print);

print是一个指向你的函数的变量。

print()是该函数的输出。(没有输出,所以是undefined)

由于您想要分配函数,而不是输出,因此必须使用print

也不需要on前缀。

转眼间:http://jsfiddle.net/AEjKC/