jQuery事件处理程序堆叠

3
我有一个类似这样的东西:http://jsfiddle.net/PTcw8/4/
<div id="container">
    <a href="#" onclick="javascript:alert('inline'); return false;"> show me </a>
    <br />
    <input type="button" value="click to change the links onclick event" onclick="javascript:changeOnClick(); return false;" />
</div>​

function changeOnClick() {
    $("#container a").unbind('click');
    $("#container a").on('click', function() {
        alert("changed on the fly");
    })
}​

这个链接有一个内联的onclick事件,我无法解除它并绑定一个新的处理程序,它们只是因为某种原因堆叠在一起。

不能解除内联处理程序吗?

2个回答

4

只有在之前使用 .bind() 方法附加了事件处理程序后,才能使用 .unbind() 方法将其删除:

使用 .bind() 方法附加的事件处理程序可以使用 .unbind() 方法删除。

对于 内联 事件处理程序,请使用以下方法之一:

$("#container a").removeAttr("onclick");

或者

$("#container a")[0].onclick = null;

演示.


好的,我理解选择器返回一个数组,但为什么处理程序会被堵塞?我想知道,应该被替换,我现在不能接受,在几分钟后我会这样做。 - Farzad Bekran
2
@Farzad Bekran:jQuery 不使用 onclick,而是使用 addEventListener。这样就没有值可以被覆盖了。 - pimvdb

1
我会这样做:
$(document).ready(
    function(){
       $("#container a").removeAttr("onclick");
       $("#container a").on('click', function() {
          alert("changed on the fly");
       })
    }
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接