jquery unbind点击

ant*_*ioh 12 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>
Run Code Online (Sandbox Code Playgroud)

任何人都知道为什么click事件会一直调用hi()函数,无论我在document.ready中说过什么?

谢谢

Cha*_*ant 21

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

$("a").bind('click',hi);
$("a").unbind('click',hi);
Run Code Online (Sandbox Code Playgroud)

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

  • 正确的,您可以通过$("#btnNext").attr('onclick','')取消绑定...但最好用jQuery完成所有绑定.它更干净,更少混乱.容易忘记您在属性中添加的javascript.;) (3认同)

Joh*_*soe 9

只是为了记录,您可以使用removeAttrjQuery函数删除最初指定的onclick属性.

$('#btnNext').removeAttr("onclick");
Run Code Online (Sandbox Code Playgroud)

另外,为了回应Chad,我同意通常使用jQuery进行所有绑定通常会更好,但我处于一种情况(使用ASP.NET MVC),需要单独的链接在其click事件处理程序中包含一些模型参数.尝试通过jQuery连接这些事件处理程序将是更复杂的IMO.