如何使用JQuery删除“ onclick”?


99

PHP代码:

<a id="a$id" onclick="check($id,1)" href="javascript:void(0)"  class="black">Qualify</a>

我想删除该onclick="check($id,1)链接,以便无法单击该链接或check($id,1)将不会触发该链接。如何使用JQuery做到这一点?

Answers:


237

旧方法(1.7版之前):

$("...").attr("onclick", "").unbind("click");

新方法(1.7+):

$("...").prop("onclick", null).off("click");

(用所需的选择器替换...。)


26
那不应该是removeAttr('onclick')吗?
Roatin Marth,2009年

是的,好的观点也许更干净,但是我不确定从执行角度来看会有所不同。
glmxndr

6
使用jQuery 1.7+,您可以使用开/关:stackoverflow.com/questions/209029/…–
Lance Cleveland

6
请参阅有关removeAttr api.jquery.com/removeattr Removing an inline onclick event handler using .removeAttr() doesn't achieve the desired effect in Internet Explorer 6, 7, or 8. To avoid potential problems, use .prop() instead
andyface 2014年

2
@andyface是的,在文档中,但是我也必须.prop()用于IE11。
2014年

57

我知道这已经很老了,但是当一个迷路的陌生人找到这个问题寻找答案时(就像我一样),那么这是最好的方法,而不是使用removeAttr():

$element.prop("onclick", null);

引用jQuerys官方doku

“使用.removeAttr()删除嵌入式onclick事件处理程序无法在Internet Explorer 6、7或8中获得理想的效果。为避免潜在的问题,请改用.prop()”。


1
我发现这是当您像这样键入onlick事件时最好的方法。 <span onlick="method()">sometext>/span>该活动完全不受限制并且效果很好
zdarsky.peter 2012年

3
我认为这不是最好的方法。jsfiddle.net/TN2wr VS jsfiddle.net/TN2wr/1
格斯

我使用的JQ早于1.6,因此$(element).attr('onclick',null); 为我工作。
metamagikum

18

移除onclick财产

假设您内联添加了click事件,如下所示:

<button id="myButton" onclick="alert('test')">Married</button>

然后,您可以像这样删除事件:

$("#myButton").prop('onclick', null); // Removes 'onclick' property if found

删除click事件监听器

假设您通过定义事件监听器添加了click事件,如下所示:

$("button").on("click", function() { alert("clicked!"); });

...或者像这样:

$("button").click(function() { alert("clicked!"); });

然后,您可以像这样删除事件:

$("#myButton").off('click');          // Removes other events if found

同时删除

如果不确定如何添加事件,则可以将两者合并,如下所示:

$("#myButton").prop('onclick', null)  // Removes 'onclick' property if found
              .off('click');          // Removes other events if found

17

如果您使用的是jQuery 1.7

$('html').off('click');

其他

$('html').unbind('click');


5

在尝试了bind,unbind,on,off,click,attr,removeAttr之后,我成功了。因此,我有以下情形:在我的html中,我没有附加任何内联onclick处理程序。

然后在我的Javascript中,我使用以下代码添加了一个内联onclick处理程序:

$(element).attr('onclick','myFunction()');

为了稍后从Javascript中删除它,我使用了以下命令:

$(element).prop('onclick',null);

这是它对我来说可以用Java绑定动态地绑定和取消单击事件的方式。切记不要在元素中插入任何内联onclick处理程序。


我喜欢这个,但是为什么一个是道具而另一个是属性呢?
2013年

我不确定,但是我看到的方式是使用attr来添加/注入具有相应myFunction()的onclick处理程序,而prop('onclick',null)会删除该属性,因此不会调用任何函数。这就是它为我工作的方式。我可以注意到该元素如何通过attr具有onclick处理程序,以及在prop之后如何将其删除。
bboydflo

1
对于未来的参考,你真的应该使用.on('click', myFunction)(注意,myFunction没有引号),然后,后来,.off('click')
加多宝还记得莫妮卡

1

如果onclick事件不是直接在元素上而是在父元素上怎么办?这应该工作:

$(".noclick").attr('onclick','').unbind('click');
$(".noclick").click(function(e){
    e.preventDefault();
    e.stopPropagation();
    return false;
});

添加另一个单击侦听器(以防止发生默认设置等)可能会将其添加到侦听器列表的末尾,因此其他侦听器仍将首先执行。我不确定是否将其添加到列表的第一位或最后一位。无论如何,最好使用“ off”,如其他答案所示。
Frederic Leitenberger,

0

如果您通过ID取消绑定onclick事件,请尝试以下操作,然后使用:

$('#youLinkID').attr('onclick','').unbind('click');

如果您按类取消了onclick事件的绑定,请尝试以下操作:

$('.className').attr('onclick','').unbind('click');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.