jquery unbind点击

时间:2009-04-24 09:24:26

标签: jquery

我只是试图从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中说过什么?

由于

4 个答案:

答案 0 :(得分:21)

因为你将它放在html属性中,所以它会保留在那里。它没有与jQuery绑定,所以jQuery没有跟踪它的用法。

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

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

答案 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();

,无论类型如何,都将删除处理程序。如果您想更具体,可以随时传递“点击”等事件类型。