事件委托在jQuery和KISSY内核中的应用
2011-07-19 11:01
232 查看
一直觉得jQuery中的 .live() 方法很神奇,居然可以对动态加入的元素进行绑定。今天终于弄明白了,原来这是通过使用事件委托实现的。
$('a').live('click', function(){
//code block1货运专家
})
上面的这段代码可以约等于(但不完全等于,在最后说明了为什么):
$(document).bind('click', function(e){
if(e.srcElement.tagName == 'a'){
//code block1
}
})
此外,jQuery还有一个 .delegate() 方法,可以实现接近 .live() 的效果:
$('#container').delegate('a','click',function(){
//code block2
})
jQuery在文档中查找#container,并使用click事件和’a'这一CSS选择器作为参数,把函数绑定到$(‘#container’)上。任何时候只要有事件冒泡到$(‘#container’)上,它就查看该事件是否是click事件,以及该事件的目标元素是否与CSS选择器相匹配。如果两种检查的结果都为真的话,它就执行绑定的函数。tp-link
在KISSY 1.2版本中也引入了 .delegate() 方法。
这两种方法中,个人觉得还是 .delegate() 方法效率高。因为 .live() 方法需要把选择器匹配到的元素都包装成jQuery对象;而 .delegate() 方法只在委托的节点上监听冒泡事件。感觉用 .live() 方法进行事件委托比较鸡肋啊,可能这也是为什么其他js框架没有类似方法的原因吧。
$('a').live('click', function(){
//code block1货运专家
})
上面的这段代码可以约等于(但不完全等于,在最后说明了为什么):
$(document).bind('click', function(e){
if(e.srcElement.tagName == 'a'){
//code block1
}
})
此外,jQuery还有一个 .delegate() 方法,可以实现接近 .live() 的效果:
$('#container').delegate('a','click',function(){
//code block2
})
jQuery在文档中查找#container,并使用click事件和’a'这一CSS选择器作为参数,把函数绑定到$(‘#container’)上。任何时候只要有事件冒泡到$(‘#container’)上,它就查看该事件是否是click事件,以及该事件的目标元素是否与CSS选择器相匹配。如果两种检查的结果都为真的话,它就执行绑定的函数。tp-link
在KISSY 1.2版本中也引入了 .delegate() 方法。
这两种方法中,个人觉得还是 .delegate() 方法效率高。因为 .live() 方法需要把选择器匹配到的元素都包装成jQuery对象;而 .delegate() 方法只在委托的节点上监听冒泡事件。感觉用 .live() 方法进行事件委托比较鸡肋啊,可能这也是为什么其他js框架没有类似方法的原因吧。
相关文章推荐
- 委托与事件及其应用
- jQuery 事件委托
- jquery事件委托的回调函数中调用全局变量的简单方法
- jquery事件委托的回调函数中调用全局变量的简单方法
- 转:jQuery事件绑定.on()简要概述及应用
- javascript事件委托和jQuery事件绑定on、off 和one以及on绑定多个事件(重要)
- javascript事件委托和jQuery事件绑定on、off 和one
- Jquery 在ios上事件委托失效?
- jQuery 选择器和事件应用
- jquery的事件与应用
- jquery live() delegate() on() 事件委托的一些区别
- 技术讲座:.NET委托、事件及应用兼谈软件项目开发
- 委托与事件以及应用【转】
- jQuery事件绑定和委托
- jquery 中的事件委托
- jquery的事件委托-bind,live,delegate,on的区别
- Jquery 事件委托在andriod正常在ios失效
- jquery笔记(六):事件代理(委托)
- 委托--事件--基础以及在现在做的项目上的实际应用(三)
- jquery 事件委托三种事件绑定方式.bind(),.live(),.delegate()