2014-02-28 59 views
2

這裏絕對新手...爲什麼我的JQuery事件處理程序刪除代碼工作

<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 
</head> 
<body> 
    <script type="text/javascript"> 
     function Foo() { 
      d = new Date(); 
      alert("Hello" + d.getTime()); 
      alert($('#a1').attr('id')); 
      $('#a1').unbind("click"); 
      $('#a1').off("click"); 
      $('#a1').unbind(); 
     } 

     $(document).ready(function() {}); 
    </script> 
    <input id='a1' type="button" value="foo" onclick="Foo();" /> 
</body> 
</html> 

但是每次我在我的富按鈕單擊它很好地彈出所有警報......完全無視我的解除綁定,關,解除呼叫。

刪除事件處理程序需要做什麼?

我的目標是,當由HTML設置的事件處理程序執行時,在事件處理程序中,我將取消綁定/取消設置/撤消/關閉由HTML設置的事件處理程序。

下面的許多解決方案完全消除了事件處理程序。但是我想先停止的第一次點擊。

我無法通過「one」方法設置事件。 HTML已經有了onclick事件。

+0

能否請您做一個小提琴? – aIKid

+0

人們如何製作小提琴? –

+0

你的意思是那個叫做fiddler的工具?那是小提琴嗎? –

回答

7

jQuery的unbind()off()僅適用於通過jQuery的分配,而不是通過onclick分配的事件處理程序的事件處理程序屬性。

如果你想清除這個屬性,你可以這樣做:

$("#a1").removeAttr("onclick"); 

到位,它應該是這樣的:

<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 
</head> 
<body> 
    <script type="text/javascript"> 
     function Foo() { 
      var d = new Date(); 
      alert("Hello" + d.getTime()); 
      alert($('#a1').attr('id')); 
      // remove event handler 
      $("#a1").removeAttr("onclick"); 
     } 

     $(document).ready(function() {}); 
    </script> 
    <input id='a1' type="button" value="foo" onclick="Foo();" /> 
</body> 
</html> 

工作演示在這裏:http://jsfiddle.net/jfriend00/bQ9Lq/


如果你想要一個只有一次點擊活動的事件處理程序,那麼你可能想要使用jQuery的.one()(而不是使用onclick)安裝原始事件處理程序,它會在觸發一次後自動刪除事件處理程序,而且甚至不必編寫代碼來刪除它。

<html> 
<head> 
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 
</head> 
<body> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("#a1").one("click", function() { 
       var d = new Date(); 
       alert("Hello" + d.getTime()); 
       alert($('#a1').attr('id')); 
      }); 
     }); 
    </script> 
    <input id='a1' type="button" value="foo" /> 
</body> 
</html> 
+0

不起作用。知道一個關鍵字,我的實際用例是我試圖刪除一個事件,這是使用onclick輔助的 你的建議完全殺死了事件,所以即使第一次點擊也不起作用 我的目標是在第一次點擊的時候,我禁用了由HTML中的onclick設置的事件處理程序 –

+0

@KnowsNotMuch - uHHH,當你想刪除事件處理程序時,將'removeAttr()'行放入函數中。 – jfriend00

+0

假設HTML將包含on點擊,你不能改變這一點。現在你將如何實現我想要的。 –

0

由於您使用內聯事件處理程序,只是刪除onclick屬性

function Foo() { 
    d = new Date(); 
    alert("Hello" + d.getTime()); 
    alert($('#a1').attr('id')); 
    $('#a1').removeAttr("onclick"); 
} 
+0

@亞歷山大第一次點擊後....我認爲OP只想調用該方法一次 –

+0

不起作用。該事件必須在第一次點擊之後被移除。 –

0

你並沒對jQuery綁定所以不使用jQuery解除綁定使用JavaScript而解除綁定,您需要索引或get()

Live Demo

$('#a1')[0].onclick = null; 

$('#a1').get(0).onclick = null;; 

您可以取消綁定使用attr()

Live Demo

$('#a1').attr("onclick", ""); 
+0

爲什麼你要做[0]爲什麼不只是$('#a1')。onclick = null;? –

+0

不起作用:(彈出仍然出現在點擊foo –

+0

因爲選擇器給你的jQuery對象和onclick是javascript的屬性 – Adil

-1

試試這個

$(document).ready(function() { 
    $("#a1").bind("click", function() { 
     d = new Date(); 
     alert("Hello" + d.getTime()); 
     alert($('#a1').attr('id')); 
     $('#a1').unbind("click"); 
    }); 
}); 

<input id='a1' type="button" value="foo" /> 
+0

這不是問題。 – jfriend00

相關問題