.undelegate()Returns: jQueryversion deprecated: 3.0
Description: Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements.
-
version added: 1.4.2.undelegate()
- This signature does not accept any arguments.
-
version added: 1.4.2.undelegate( selector, eventType )
-
version added: 1.4.2.undelegate( selector, eventType, handler )
-
version added: 1.4.3.undelegate( selector, events )
- selectorType: StringA selector which will be used to filter the event results.
- eventsType: PlainObjectAn object of one or more event types and previously bound functions to unbind from them.
-
-
version added: 1.6.undelegate( namespace )
- namespaceType: StringA string containing a namespace to unbind all events from.
-
As of jQuery 3.0, .undelegate()
has been deprecated. It was superseded by the .off()
method since jQuery 1.7, so its use was already discouraged.
The .undelegate()
method is a way of removing event handlers that have been bound using .delegate()
.
Examples:
Can bind and unbind events to the colored button.
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>undelegate demo</title> <style> button { margin: 5px; } button#theone { color: red; background: yellow; } </style> <script src="https://code.jquery.com/jquery-3.5.0.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:
To unbind all delegated events from all paragraphs, write:
$( "p" ).undelegate();
To unbind all delegated click events from all paragraphs, write:
$( "p" ).undelegate( "click" );
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 }; // ... Now foo will be called when paragraphs are clicked ... $( "body" ).delegate( "p", "click", foo ); // ... foo will no longer be called. $( "body" ).undelegate( "p", "click", foo );
To unbind all delegated events by their namespace:
var foo = function() { // Code to handle some kind of event }; // Delegate events under the ".whatever" namespace $( "form" ).delegate( ":button", "click.whatever", foo ); $( "form" ).delegate( "input[type='text'] ", "keypress.whatever", foo ); // Unbind all events delegated under the ".whatever" namespace $( "form" ).undelegate( ".whatever" );