Reputation: 2944
I'm going nuts just trying to unbind an onclick handler from the event in jQuery so I can bind it later on to another function.
I have isolated the code in a test page so there's nothing but the meat, just a button that calls a function and a script that tries to unbind it:
<%@ 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>
Anybody knows why the click event keeps calling the hi() function no matter what I said in the document.ready?
Thanks
Upvotes: 12
Views: 29295
Reputation: 7972
Let's say you have
$(elem).on("click", function() { ... });
you don't even need to bind it if you want to unbind it later. To do so can just do:
$(elem).unbind();
and that will remove the handlers regardless of type. If you want to be more specific, you can always pass an event type like "click".
Upvotes: 0
Reputation: 19
I couldn't get removeAttr to work, but this does:
$("#btnNext").click(function(){ return false; });
I was wanting to remove the ASP.NET-supplied onclicks (just for SelectedNodeChanged) in my TreeView, so I could handle the event on the client. Of course, my click function included more than "return false".
Upvotes: 0
Reputation: 17642
Just for the record, you can use the removeAttr
jQuery function to remove the initially specified onclick
attribute.
$('#btnNext').removeAttr("onclick");
Also, in response to Chad, I agree that it is generally better to do all your binding with jQuery, but I'm in a situation (using ASP.NET MVC) that requires individual links to have some model parameters in their click event handlers. It would be more convoluted IMO to try to wire up these event handlers via jQuery.
Upvotes: 9
Reputation: 45382
Because you put it in the html attribute, it stays there. It was not bound with jQuery so jQuery is not tracking it's usage.
$("a").bind('click',hi);
$("a").unbind('click',hi);
http://docs.jquery.com/Events/bind
Upvotes: 21