返回值:jQuerydelegate(selector, eventType, handler(eventObject))
为所有与选择器匹配的元素的一个或多个事件添加事件处理。基于一个指定的根元素的子集,匹配的元素包括那些目前已经匹配到的元素,也包括那些今后可能匹配到的元素。
-
1.4.2 新增delegate(selector, eventType, handler(eventObject))
selector (String) 触发事件的元素选择器。eventType (String) 含有 JavaScript 事件类型的字符串,字符串间使用空格分隔,例如:"click" , "keydown," 或自定义事件名称。handler(eventObject) (Function) 每当事件触发时执行的函数。 -
1.4.2 新增delegate(selector, eventType, eventData, handler(eventObject))
selector (String) 触发事件的元素选择器。eventType (String) 含有 JavaScript 事件类型的字符串,字符串间使用空格分隔,例如:"click" , "keydown," 或自定义事件名称。eventData (Object) 将要传递给事件处理函数的数据映射。handler(eventObject) (Function) 每当事件触发时执行的函数。 -
1.4.3 新增delegate(selector, events)
selector (String) 触发事件的元素选择器。events (Map) 包含一个或多个将要被调用的,由事件类型和函数组成的映射。
从 jQuery 1.7 开始,.delegate()
已经被 .on() 方法所取代。然而,对于早期的版本,该方法依然是进行事件代理最有效的方法。更多关于事件绑定和代理的方法,请参阅 .on() 方法。一般来说,这两种方法是等价的:
$(elements).delegate(selector, events, data, handler); // jQuery 1.4.3+ $(elements).on(events, selector, data, handler); // jQuery 1.7+
例如,有如下关于 .delegate()
的代码:
$("table").delegate("td", "click", function() { $(this).toggleClass("chosen"); });
它等价于如下 .on()
方法:
$("table").on("click", "td", function() { $(this).toggleClass("chosen"); });
若要移除通过 delegate()
绑定的事件,请使用 .undelegate() 方法。
传递并处理 event data 的方式与 .on()
是相同的。
补充说明:
- 因为
.live()
事件一旦被传播到文档顶部,就不可能再阻止 live 事件的传播。类似的,通过.delegate()
执行的事件,也会传播到调用它们的元素上。同时,任何在 DOM 树中,比这些元素低的元素上绑定的相同事件,在.delegate()
事件被调用的时候,也会被触发。因此,如果要在事件中阻止委托事件被触发,可以通过调用event.stopPropagation()
方法,或返回false
的方式来实现。
示例:
点击段落时,添加另一个段落。注意,.delegate() 会为所有的段落(包括新生成的段落)绑定事件。
<!DOCTYPE html>
<html>
<head>
<style>
p { background:yellow; font-weight:bold; cursor:pointer;
padding:5px; }
p.over { background: #ccc; }
span { color:red; }
</style>
<script src="jquery.min.js"></script>
</head>
<body>
<p>Click me!</p>
<span></span>
<script>
$("body").delegate("p", "click", function(){
$(this).after("<p>Another paragraph!</p>");
});
</script>
</body>
</html>
演示:
示例:
点击段落时,显示该段落的内容:
jQuery 代码:
$("body").delegate("p", "click", function(){
alert( $(this).text() );
});
示例:
通过返回 false 的方法,取消默认的动作,并阻止事件向上冒泡:
jQuery 代码:
$("body").delegate("a", "click", function() { return false; })
示例:
通过使用 preventDefault 方法仅取消默认的动作。
jQuery 代码:
$("body").delegate("a", "click", function(event){
event.preventDefault();
});
示例:
还可以绑定自定义事件。
<!DOCTYPE html>
<html>
<head>
<style>
p { color:red; }
span { color:blue; }
</style>
<script src="jquery.min.js"></script>
</head>
<body>
<p>Has an attached custom event.</p>
<button>Trigger custom event</button>
<span style="display:none;"></span>
<script>
$("body").delegate("p", "myCustomEvent", function(e, myName, myValue){
$(this).text("Hi there!");
$("span").stop().css("opacity", 1)
.text("myName = " + myName)
.fadeIn(30).fadeOut(1000);
});
$("button").click(function () {
$("p").trigger("myCustomEvent");
});
</script>
</body>
</html>