我只是试图从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
只是为了记录,您可以使用removeAttrjQuery函数删除最初指定的onclick属性.
$('#btnNext').removeAttr("onclick");
Run Code Online (Sandbox Code Playgroud)
另外,为了回应Chad,我同意通常使用jQuery进行所有绑定通常会更好,但我处于一种情况(使用ASP.NET MVC),需要单独的链接在其click事件处理程序中包含一些模型参数.尝试通过jQuery连接这些事件处理程序将是更复杂的IMO.