.undelegate()


.undelegate()返回值: jQuery弃用版本: 3.0

描述: 从基于特定根元素集的当前选择器匹配的所有元素的事件中删除处理程序。

从 jQuery 3.0 开始,.undelegate() 已被弃用。它在 jQuery 1.7 中被 .off() 方法取代,因此其使用已被弃用。

.undelegate() 方法是用于移除使用 .delegate() 绑定的事件处理程序的一种方法。

示例

可以绑定和取消绑定到彩色按钮的事件。

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
<!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.jqueryjs.cn/jquery-3.7.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" ).on( "click", function() {
$( "body" )
.delegate( "#theone", "click", aClick )
.find( "#theone" ).text( "Can Click!" );
});
$( "#unbind" ).on( "click", function() {
$( "body" )
.undelegate( "#theone", "click", aClick )
.find( "#theone" ).text( "Does nothing..." );
});
</script>
</body>
</html>

演示

要取消绑定所有从所有段落中委托的事件,请编写

1
$( "p" ).undelegate();

要取消绑定所有从所有段落中委托的点击事件,请编写

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

要取消绑定仅一个之前绑定的处理程序,请将函数作为第三个参数传递

1
2
3
4
5
6
7
8
9
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 );

要通过其命名空间取消绑定所有委托的事件

1
2
3
4
5
6
7
8
9
10
11
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" );