什么是jquery中的事件委派?
在jquery中有一个很重要的概念——事件委派,相信很多搞前端开发的人都听说过,零度逍遥本来对此不是十分理解,但经过一个高人的指点后,才发现这个功能还是蛮强大的,今天就给大家分享一下。
事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素。
说的有点抽象,按照惯例,还是举个例子说明:
代码如下 | 复制代码 |
<ul class="list"> |
这是一个ul,里面包含4个li,如果想要给li加上点击事件,弹出一些内容,我们一般这样写:
$('.list li').click(function(){
alert(1111);
})
这样当我们点击list里面的任何一个li都可以弹出‘1111’,但这样做有两个弊端:
1.很耗费资源,因为这种方式是给每个li都加上了事件,li的个数少的话还没事,如果li多的话会很耗费资源。
2.如果后期动态添加li,不会拥有这个弹出事件。
针对以上问题,可以用事件委派来解决,我们完全可以写出这样一段代码:
代码如下 | 复制代码 |
$(".list").delegate("li", "click", function(){ |
这个就是jquery的事件委派,有的时候还是很能派上用场的,骚年们,玩起来吧!
.live()与流行的liveQuery插件很像,但有以下几个主要区别:
* .live 目前只支持所有事件的子集,支持列表参考上面的说明。
* .live 不支持liveQuery提供的“无事件”样式的回调函数。.live只能绑定事件处理函数。
* .live 没有"setup"和"cleanup"的过程。因为所有的事件是委派而不是直接绑定在元素上的。
HTML 代码:
代码如下 | 复制代码 |
<p>Click me!</p> $("p").live("click", function(){ |
事件委派一次绑定多种事件
一次性绑定多个事件,根据事件类别委派相应的操作
为了更好地优化上面的代码,可以通过事件委派来修改代码,修改后的代码如下:
代码如下 | 复制代码 |
jQuery(function($) { |
该段代码中一次性地将多个事件绑定到一个待处理的DOM对象之上,在代码的内部通过判断事件的类别来委派不同的处理代码。这样可以避免代码的重复定义,以达到避免时间冗余的效果。
事件委派、传递
当列表里的一列被点击,新的列被加入列表。如果想让新加入的列也具有相同的事件控制,我们可以使用事件委派,把事件处理方法传递给新的列。
代码如下 | 复制代码 |
$(document).ready(function() { |
在jQuery1.7中 .delegate()已被.on()取代。对于早期版本,它仍然使用事件委托的最有效手段。
在事件绑定和委派,delegate()和on在一般情况下,这两种方法是等效的。
.delegate() 指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。
// jQuery 1.4.3+
$( elements ).delegate( selector, events, data, handler );
// jQuery 1.7+
$( elements ).on( events, [selector], data, handler );
例如:.delegate() code:
$("table").delegate("td","click",function(){
alert("hello");
});
.on() code:
$("table").on("click", "td", function() {
alert("hi");
});
PS: 两者区别是seleter和events顺序不同
delegate和on方法被选元素的子元素必须是"合法的"子元素。比如
$("table").delegate("button","click",function(){...});
$("table").on("click", "p", function(){...});
就不起作用,因为正常情况下,table子元素应为tr,td...
on(events,[selector],[data],fn),参数[selector]是可选,
一个选择器字符串用于过滤器的触发事件的选择器元素的后代。
例如:
$("table").on("click", ".td1", function() {
alert("hi");
});
过滤class为td1的table子元素
而delegate的selector是必需的。
浅谈jquery中delegate()与live()
delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序
例如给id是showspan的div中的span标签添加事件
1
2
3
4
5
6
7
8
9
10
|
<div id=
"showspan"
><span>showspan**showspan</span></div>
<span>outspan</span>
<SCRIPT LANGUAGE=
"JavaScript"
>
<!--
//效果就是点击一个段落<div id="showspan">中span标签将在span标签后面添加一个span标签,对于新增的span标签同样可以点击新增一个span标签,新增的标签不需要监听其click事件
$(
"#showspan"
).delegate(
"span"
,
"click"
,
function
(){
$(
this
).after(
"<span>showspan**showspan</span>"
);
});
//-->
</SCRIPT>
|
live() 方法为被选元素附加一个或多个事件处理程序(不能给其子元素添加事件)
例如给p标签添加事件
1
2
3
4
5
6
7
8
|
<p class=
"showp"
>pppppppp</p>
<SCRIPT LANGUAGE=
"JavaScript"
>
<!--
$(
".showp"
).live(
"click"
,
function
(){
$(
this
).after(
"<p>pppppppp</p>"
);
});
//-->
</SCRIPT>
|
以上所述就是本文的全部内容了,希望大家能够喜欢。