无法使用addEventListener注册onclick

Jav*_*eek 2 javascript

我只是想注册onclickdiv,但它不工作.相反,alert加载页面时会触发cal to .

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


var divElement = document.getElementById("content");
divElement.addEventListener("onclick", print());
Run Code Online (Sandbox Code Playgroud)

这是一个jsFiddle.

Jes*_*sse 8

问题是你没有需要的on前缀.而且print应该不会有空括号.空括号将导致函数执行,并且其返回值将作为要调用函数传递 - 这不是您想要的.

试试这个:

var divElement = document.getElementById("content");
divElement.addEventListener("click", print);
Run Code Online (Sandbox Code Playgroud)

这是一个更新的工作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');
    }
}
Run Code Online (Sandbox Code Playgroud)

而不是使用divElement.addEventListener("click", print),你会这样做AttachEventListener(divElement, 'click', print).

主要使用辅助函数的原因是因为旧版本的Internet Explorer 具备addEventListener,并且要求on使用时的前缀attachEvent.这个辅助函数将为您节省在每个事件绑定时自行检查功能的麻烦.