.undelegate()

.undelegate()返回类型:jQueryversion deprecated: 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.jquery.com/jquery-1.10.2.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>

演示:

从所有段落上解绑所有的委托事件,写成:

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" );