22

Okay so, I'm wondering how to unbind an inline onclick event in jQuery. You'd think .unbind() would work, however it doesn't.

To test this for yourself, play around with the following HTML and JavaScript:

function UnbindTest() {
    $("#unbindTest").unbind('click');
}

function BindTest() {
    $("#unbindTest").bind('click', function() { alert("bound!"); });
}


<button type="button" onclick="javascript:UnbindTest();">Unbind Test</button>
<button type="button" onclick="javascript:BindTest();">Bind Test</button>
<button type="button" onclick="javascript:alert('unbind me!');" id="unbindTest">Unbind Button</button>

As you can see, unbinding does not unbind the inline onclick event... however it does unbind the click event added with bind().

So, I'm wondering if there is a way to unbind inline onclick events short of doing the following:

$("#unbindTest").get(0).onclick = "";

Thanks

DigitalZebra
  • 39,494
  • 39
  • 114
  • 146

2 Answers2

34

jQuery's unbind won't work on onclick attributes - it only works for functions that were added via bind and thus are available in $(...).data('events'). You have to use removeAttr to remove onclick.

Read this question for more info.

Community
  • 1
  • 1
Marcel Jackwerth
  • 53,948
  • 9
  • 74
  • 88
4

unbind unbinds event handlers registered with bind, not ones assigned via the onclick or other DOM0 attributes. From the docs:

Any handler that has been attached with .bind() can be removed with .unbind().

Edit: You unbind DOM0 handlers by clearing the relevant attribute on the element. I had to go look up the jQuery way of doing that: removeAttr.

T.J. Crowder
  • 1,031,962
  • 187
  • 1,923
  • 1,875