返回事件处理程序返回undefined

时间:2010-08-09 13:58:14

标签: javascript javascript-events

以下代码不起作用:

function dnd(){
}
var ele = document.getElementById("relative");
ele.addEventListener("click",dnd,false);
document.write(ele.onclick);

输出为undefined。我猜输出应该是function onclick(event){dnd();}

我该怎么做才能解决这个问题?

任何建议都表示赞赏。

4 个答案:

答案 0 :(得分:2)

将事件附加到DOM节点有三种常用方法。

addEventListener()方法是注册W3C DOM中指定的事件侦听器的方法。它有许多好处,但在Internet Explorer中不起作用。对于Internet Explorer,您必须使用attachEvent()方法,该方法提供类似的功能。

另一方面,onclick属性是一种较旧但更受支持的附加事件处理程序的方法。但是它有一些缺点,例如每个事件只允许一个事件处理程序。

至于如何取回附加到特定节点的事件处理程序,它取决于用于附加事件的方法。您的示例的问题是您使用addEventListener()方法附加事件,然后尝试使用onclick属性读取它。

您可能需要查看以下Stack Overflow帖子以进一步阅读本主题,尤其是post by @Crescent Fresh

答案 1 :(得分:0)

onclick 属性只会显示一个事件处理程序,如果它是通过标记内联注册的(例如,<div id="relative" onclick="alert('foo');"&gt; </div&gt;)。 / p>

为什么需要阅读事件处理程序?这是一件相对奇怪的事情......

答案 2 :(得分:0)

有不同的方法来建立事件处理程序,它们在DOM中使用不同的机制。特别是 - 正如您在经验中发现的那样 - 通过“addEventListener”添加事件侦听器不会影响元素的“onclick”属性。这些机制很简单。

答案 3 :(得分:0)

这是W3C事件注册模型的当前限制之一。如果您使用JS方法注册,那么没有标准的方法来获取处理程序。

最新DOM LEVEL 3 Events W3C添加了eventListenerList规范。我想我们在浏览器中缺乏对此API的一些密切支持。

当然,如果您使用传统方式添加方法



      


然后你的例子就可以了。

一些StackOverFlow链接

link text