2010-10-02 67 views
11

我有一些onclick屬性的HTML。我想用jQuery覆蓋該屬性。有沒有辦法使用jQuery刪除點擊處理程序?使用unbind doesn't work我可以使用jQuery刪除內聯事件處理程序嗎?

+0

我知道,對於一個大型網站可能是笨拙,但它不會是(在下載代碼帶寬方面,更輕),更易於使用記事本/ Textmate/Gedit(或任何其他文本編輯器)查找「onclick」(或onClick)的所有實例並將其完全刪除? – 2010-10-02 15:07:39

+0

@David - 我正在處理由Rails 2生成的內聯垃圾。一旦我上傳到Rails 3,我就不會遇到這個問題,因爲他們已經使所有的JavaScript不顯眼。 – Skilldrick 2010-10-02 15:15:38

+0

......我不能否認Rails(但我從來沒有真正玩過它),但是爲了迴應它那代「內聯垃圾」,我只能說* ewwwwww * ... – 2010-10-02 15:17:09

回答

19

嘗試.removeAttr()功能:

$(function() { 
    $('a').removeAttr('onclick'); 
}); 

jsfiddle demo

一旦你擺脫了onclick屬性,你可以附加你自己的點擊處理程序。

+0

完美!謝謝。 – Skilldrick 2010-10-02 15:05:27

+0

我有一個標籤上的js內聯代碼onclick =「document.setLang {{lang.1}}。submit(); return false;」提交表單,但我不能停止提交表單,如你所說... – ratata 2015-02-26 08:54:04

8
$("#theElement")[0].onclick = function() { 
    whatever(); 
}; 
// -- or -- 
$("#theElement")[0].onclick = null; 

這不是說jQuery會使標準的DOM功能和屬性消失。 ;-)

+1

你是對的,但關於jQuery函數的好處是它們適用於所有元素,所以我可以從所有匹配元素中刪除onclick,而無需在他們旁邊閒逛。 – Skilldrick 2010-10-02 15:34:41

+0

@Skilldrick:從技術上講,'removeAttr()'也是一個循環。但我同意自己編寫循環會更方便。 – Tomalak 2010-10-02 15:45:08

0

有一個它的插件,但你應該只在你真的需要時這樣做。該插件可讓您選擇調用舊函數或完全忽略它。

jQuery Override Plugin

$(divElementObj).override('onclick', 'click', function(...)); 
0

試圖給出的選項,但部分工作,因爲他們刪除了一個但不是全部。

相反,我嘗試以下鏈接作爲解決方法。我正在使用版本1.4.2。

jQuery(「selector」) 
    .removeAttr("onclick").removeAttr("onmouseout").removeAttr("onmouseover"); 
2

http://api.jquery.com/prop/卸下使用.removeAttr()不會實現在Internet Explorer 8,9和11所希望的效果爲了避免潛在的問題的內聯onclick事件處理程序中,使用.prop()代替。

因此,這是可以做到

$(function() { 
    $('a').prop('onclick', false); 
}); 
相關問題