2012-09-01 132 views
3

我有这样的事情:http://jsfiddle.net/PTcw8/4/jQuery的事件处理程序堆叠

<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事件,我不能解除绑定和绑定一个新的处理程序,他们只是堆出于某种原因。

是不是可以解除内联处理程序?

回答

4

只能.unbind()如果您以前使用.bind()连接它的事件处理程序:使用带有.bind

事件处理程序()可以用.unbind删除()。

对于直列事件处理程序,无论是使用:

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

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

DEMO

+0

确定这样的IM认识以此为选择器返回一个数组,但为什么处理程序得到堆叠?我想知道,它应该被替换,不能在几分钟内接受我会一次我可以 –

+2

@Farzad Bekran:jQuery不使用'onclick',而是'addEventListener'。这种覆盖方式没有价值。 – pimvdb

+0

好吧,谢谢。 –

1

我这样做:

$(document).ready(
    function(){ 
     $("#container a").removeAttr("onclick"); 
     $("#container a").on('click', function() { 
      alert("changed on the fly"); 
     }) 
    } 
);