我只是试图从jQuery中的事件中取消绑定onclick处理程序,所以我可以稍后将其绑定到另一个函数。
我已经在测试页面中隔离了代码,所以除了肉,只需要一个调用函数的按钮和一个尝试解除绑定它的脚本:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript">
</script>
<script src="../../Scripts/jquery-1.3.2.js" type="text/javascript">
</script>
<script type="text/javascript" language="javascript">
$(document).ready(function() { $("#btnNext").unbind('click'); });
function hi() {window.alert("hi");}
</script>
</head>
<body>
<input id="btnNext" type="button" value="Next" onclick="hi();" />
</body>
</html>
任何人都知道为什么click事件会一直调用hi()函数,无论我在document.ready中说过什么?
由于
答案 0 :(得分:21)
因为你将它放在html属性中,所以它会保留在那里。它没有与jQuery绑定,所以jQuery没有跟踪它的用法。
$("a").bind('click',hi);
$("a").unbind('click',hi);
答案 1 :(得分:9)
仅为记录,您可以使用removeAttr
jQuery函数删除最初指定的onclick
属性。
$('#btnNext').removeAttr("onclick");
另外,为了回应Chad,我同意通常最好用jQuery完成所有绑定,但是我处于一种情况(使用ASP.NET MVC),需要单独的链接才能在其中包含一些模型参数单击事件处理程序。尝试通过jQuery连接这些事件处理程序会让IMO更加复杂。
答案 2 :(得分:0)
我无法让removeAttr工作,但这样做:
$("#btnNext").click(function(){ return false; });
我想在TreeView中删除ASP.NET提供的onclicks(仅用于SelectedNodeChanged),因此我可以在客户端上处理该事件。当然,我的点击功能不仅包括“return false”。
答案 3 :(得分:0)
假设你有
$(elem).on("click", function() { ... });
如果你想稍后解开它,你甚至不需要绑定它。这样做可以做:
$(elem).unbind();
,无论类型如何,都将删除处理程序。如果您想更具体,可以随时传递“点击”等事件类型。