2

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

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


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

这是一个jsFiddle

4

2 回答 2

8

问题是您不需要前缀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并且在使用时确实需要on前缀attachEvent。这个辅助函数将省去您在每个事件绑定上自己进行功能检查的麻烦。

于 2013-04-19T17:11:23.290 回答
4

你应该这样写:

divElement.addEventListener("click", print);

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

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

由于您要分配功能而不是输出,因此您必须使用print.

此外,您不需要on前缀。

Presto:http: //jsfiddle.net/AEjKC/

于 2013-04-19T17:10:37.460 回答