jQuery API

.undelegate()

.undelegate( ) Returns: jQuery

Description: Remove a handler from the event for all elements which match the current selector, now or in the future, based upon a specific set of root elements.

  • version added: 1.4.2.undelegate()

  • version added: 1.4.2.undelegate( selector, eventType )

    selectorA selector which will be used to filter the event results.

    eventTypeA string containing a JavaScript event type, such as "click" or "keydown"

  • version added: 1.4.2.undelegate( selector, eventType, handler )

    selectorA selector which will be used to filter the event results.

    eventTypeA string containing a JavaScript event type, such as "click" or "keydown"

    handlerA function to execute at the time the event is triggered.

Undelegate is a way of removing event handlers that have been bound using .delegate(). It works virtually identically to .die() with the addition of a selector filter argument (which is required for delegation to work).

Examples:

Example: Can bind and unbind events to the colored button.

<!DOCTYPE html>
<html>
<head>
  <style>
button { margin:5px; }
button#theone { color:red; background:yellow; }
</style>
  <script src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
	<button id="theone">Does nothing...</button>
<button id="bind">Bind Click</button>
<button id="unbind">Unbind Click</button>
<div style="display:none;">Click!</div>
<script>
function aClick() {
  $("div").show().fadeOut("slow");
}
$("#bind").click(function () {
  $("body").delegate("#theone", "click", aClick)
    .find("#theone").text("Can Click!");
});
$("#unbind").click(function () {
  $("body").undelegate("#theone", "click", aClick)
    .find("#theone").text("Does nothing...");
});
</script>

</body>
</html>

Demo:

Example: To unbind all delegated events from all paragraphs, write:

$("p").undelegate()

Example: To unbind all delegated click events from all paragraphs, write:

$("p").undelegate( "click" )

Example: To undelegate just one previously bound handler, pass the function in as the third argument:

var foo = function () {
// code to handle some kind of event
};

$("body").delegate("p", "click", foo); // ... now foo will be called when paragraphs are clicked ...

$("body").undelegate("p", "click", foo); // ... foo will no longer be called.

Comments

  • Support requests, bug reports, and off-topic comments will be deleted without warning.

  • Please do post corrections or additional examples for .undelegate() below. We aim to quickly move corrections into the documentation.
  • If you need help, post at the forums or in the #jquery IRC channel.
  • Report bugs on the bug tracker or the jQuery Forum.
  • Discussions about the API specifically should be addressed in the Developing jQuery Core forum.
  • Should namespacing on .undelegate be possible? For example, if I delegate with the following command:

    $("#mydiv").delegate("a", "click.ns1", function(){ ... });

    And then I try to undelegate, doing the following doesn't work:
    $("#mydiv").undelegate("a", ".ns1");

    Instead, I need to use the event-specific eventType:
    $("#mydiv").undelegate("a", "click.ns1");

    It could be useful to have the namespace-only option, which is possible in .unbind.
Time to generate: 1.83417