2012-09-01 131 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"); 
     }) 
    } 
);