jQuery解绑定点击事件

12

我正在尝试在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>

有谁知道为什么无论我在document.ready中怎么写,点击事件都会一直调用hi()函数?

谢谢

4个回答

21
因为你将它放在HTML属性中,所以它就留在那里了。它没有与jQuery绑定,因此jQuery无法跟踪它的使用情况。

由于您将其放置在HTML属性中,因此它会保留在那里。它未与jQuery绑定,因此jQuery不会跟踪其使用情况。

$("a").bind('click',hi);
$("a").unbind('click',hi);

http://docs.jquery.com/Events/bind


你的意思是任何以声明模式设置的内容都不能像这样解除绑定吗? - antonioh
3
没问题,你可以通过 $("#btnNext").attr('onclick','') 取消绑定...但最好全部使用jQuery来绑定。这样更加清晰、不易混淆。如果使用属性添加JavaScript代码的话,很容易被遗忘。 ;) - Chad Grant
太好了,现在我明白为什么它不起作用了。我会按照你说的进行绑定。谢谢! - antonioh
1
np ;) 还注意到你添加了两次 jQuery,只需要 .min 版本就可以了。 - Chad Grant

9

仅供参考,您可以使用removeAttr jQuery函数来删除最初指定的onclick属性。

$('#btnNext').removeAttr("onclick");

此外,回应Chad的问题,我同意使用jQuery进行所有绑定通常会更好,但我现在处于一种情况(使用ASP.NET MVC),需要在单个链接的点击事件处理程序中添加一些模型参数。尝试通过jQuery来连接这些事件处理程序可能会更加复杂。

这在IE中不起作用(当然)。有人知道如何在IE中取消“onclick”事件的绑定吗? - Patrick Lee Scott

0

假设你有

$(elem).on("click", function() { ... }); 

如果你想在后面解绑,甚至不需要去绑定它。你可以这样做:

$(elem).unbind();

这将删除所有处理程序,而不考虑类型。如果您想更具体地指定,可以始终传递事件类型,例如“click”。


0

我无法让removeAttr起作用,但是这个可以:

$("#btnNext").click(function(){ return false; });

我想要移除TreeView中由ASP.NET提供的onclick事件(仅限于SelectedNodeChanged),以便我可以在客户端处理该事件。当然,我的点击函数包含的不仅仅是"return false"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接