以下代码不起作用:
function dnd(){
}
var ele = document.getElementById("relative");
ele.addEventListener("click",dnd,false);
document.write(ele.onclick);
输出为undefined
。我猜输出应该是function onclick(event){dnd();}
我该怎么做才能解决这个问题?
任何建议都表示赞赏。
答案 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链接