The .off() method removes event handlers that were attached with .on(). See the discussion of delegated and directly bound events on that page for more information. Calling .off() with no arguments removes all handlers attached to the elements. Specific event handlers can be removed on elements by providing combinations of event names, namespaces, selectors, or handler function names. When multiple filtering arguments are given, all of the arguments provided must match for the event handler to be removed.

If a simple event name such as "click" is provided, all events of that type (both direct and delegated) are removed from the elements in the jQuery set. When writing code that will be used as a plugin, or simply when working with a large code base, best practice is to attach and remove events using namespaces so that the code will not inadvertently remove event handlers attached by other code. All events of all types in a specific namespace can be removed from an element by providing just a namespace, such as ".myPlugin". At minimum, either a namespace or event name must be provided.

To remove specific delegated event handlers, provide a selector argument. The selector string must exactly match the one passed to .on() when the event handler was attached. To remove all delegated events from an element without removing non-delegated events, use the special value "**".

A handler can also be removed by specifying the function name in the handler argument. When jQuery attaches an event handler, it assigns a unique id to the handler function. Handlers proxied by jQuery.proxy() or a similar mechanism will all have the same unique id (the proxy function), so passing proxied handlers to .off may remove more handlers than intended. In those situations it is better to attach and remove event handlers using namespaces.

As with .on(), you can pass events as an object instead of specifying an events string and handler function as separate arguments. The keys for the events object are events and/or namespaces; the values are handler functions or the special value false.

Examples:

Example: Add and remove event handlers on the colored button.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

<!doctype html>

<htmllang="en">

<head>

<metacharset="utf-8">

<title>off demo</title>

<style>

button{

margin:5px;

}

button#theone{

color: red;

background: yellow;

}

</style>

<scriptsrc="https://code.jquery.com/jquery-1.10.2.js"></script>

</head>

<body>

<buttonid="theone">Does nothing...</button>

<buttonid="bind">Add Click</button>

<buttonid="unbind">Remove Click</button>

<divstyle="display:none;">Click!</div>

<script>

functionflash() {

$( "div" ).show().fadeOut( "slow" );

}

$( "#bind" ).click(function() {

$( "body" )

.on( "click", "#theone", flash )

.find( "#theone" )

.text( "Can Click!" );

});

$( "#unbind" ).click(function() {

$( "body" )

.off( "click", "#theone", flash )

.find( "#theone" )

.text( "Does nothing..." );

});

</script>

</body>

</html>

Demo:

Example: Remove all event handlers from all paragraphs:

1

$( "p" ).off();

Example: Remove all delegated click handlers from all paragraphs:

1

$( "p" ).off( "click", "**" );

Example: Remove just one previously bound handler by passing it as the third argument: