jquery 我有个小困惑 到底是用live还是直接把要生产的事件绑定在对象上?

中文版的事件委托.live()方法能对一个还没有添加进DOM的元素有效,是由于使用了事件委托:绑定在祖先元素上的事件处理函数可以对在后代上触发的事件作出回应。传递给.li... 中文版的事件委托

.live() 方法能对一个还没有添加进DOM的元素有效,是由于使用了事件委托:绑定在祖先元素上的事件处理函数可以对在后代上触发的事件作出回应。传递给 .live() 的事件处理函数不会绑定在元素上,而是把他作为一个特殊的事件处理函数,绑定在 DOM 树的根节点上。在我们的例子中,当点击新的元素后,会依次发生下列步骤:

生成一个click事件传递给 <div> 来处理
由于没有事件处理函数直接绑定在 <div> 上,所以事件冒泡到DOM树上
事件不断冒泡一直到DOM树的根节点,默认情况下上面绑定了这个特殊的事件处理函数。
执行由 .live() 绑定的特殊的 click 事件处理函数。
这个事件处理函数首先检测事件对象的 target 来确定是不是需要继续。这个测试是通过检测 $(event.target).closest('.clickme') 能否找到匹配的元素来实现的。
如果找到了匹配的元素,那么调用原始的事件处理函数。

由于只有在事件发生时才会在上面的第五步里做测试,因此在任何时候添加的元素都能够响应这个事件。
我因此个人觉得直接绑定在元素上比较好?不过不敢确定
展开
 我来答
zwb12340
2011-01-23 · TA获得超过257个赞
知道小有建树答主
回答量:251
采纳率:0%
帮助的人:280万
展开全部
1.我在实际项目中做的时候还是尽量用bind.
2.jQuery对DOM的事件触发具有冒泡特性.(不光是它的事件委托)
3.事件委托的好处:当页面上某个元素上的事件触发时,在 DOM 继承关系上,这个元素的所有子元素也能接收到这个事件,这时你可以使用一个在父元素上的事件处理器来处理(事件委托来处理),而不是使用一堆的各个子元素上的事件监听器来处理(绑定就是建立监听器);

4.事件委托的迷惑:实际建立事件委托的时候,并不是都能可靠运行,存在浏览器兼容问题.这似乎不是简单的W3C的标准就能可靠的实现的(需要用一些工具包去建立事件模型).可以参考下这篇文章http://www.e6wa.com/Article/164.aspx
5.jquery中的live(1.42)只支持说明文档中指定的事件(事件子集),并且一次只能绑定一个事件,(这条我想说的意思是,live方法虽然能够扑捉到动态加入的dom元素,但他的事件委托是有局限性的)
6.在jQuery性能优化指南中提到慎用 .live()方法(说明下,该文中的很多是针对1.32版本以前的)提到理由是这个方法比较占用资源.也就是说从运行性能上来说live()有些影响
7.我想如果不是页面很复杂的情况下用它应该没啥问题的,从编程上来说它是个优秀的方法.只是页面太复杂,我担心有些不可控性,让页面代码不好维护,才没有采用它.
上面写了几条不成熟的看法,共参考
lmqnli
2011-01-23 · TA获得超过1347个赞
知道小有建树答主
回答量:1328
采纳率:50%
帮助的人:995万
展开全部
可以同时使用的啊,估计你是被mouseover以后保留的样式影响了

$("p").mouseover( function() );
$("p").mouseout( function() );
先用mouseout把mouseover的样式取消掉
然后写
$("p").mousedown( function() );

同理
$("p").hover( function() ,function() );
第二个function写鼠标移走后的样式
之后再写click就可以看到效果了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
island0505
2011-01-23 · TA获得超过190个赞
知道小有建树答主
回答量:93
采纳率:0%
帮助的人:103万
展开全部
这个需要说明下.bind系绑定事件和.live绑定事件的区别:
先说.bind系的,类似与.bind .click .mouseover等等,一个例子:
$('.trigger').bind('click',fn);
执行这条语句,很明显,给DOM中所有有类.trigger的元素的click事件绑定fn函数。目的是当这些元素被点击时,触发click事件,执行fn函数;
不过有个问题:
在$('.trigger').bind('click',fn);这条语句执行完后,我们也许:
$('<div class="trigger">some trigger</div>').appendTo($('body'));
向body中插入一个有tigger类的div,请问,单击这个div,fn会被调用吗?
不会,因为事件绑定的时候DOM中还没有这个元素。

好了,.live的作用就在于此:
……
$('.trigger').live('click',fn);
……
$('<div class="trigger">some trigger</div>').appendTo($('body'));
……
用.live绑定事件的话,对于将来新插入的元素同样绑定事件。

其实我还在思考,jQuery如何实现这么犀利的功能,现在被你提示了,将事件绑定在DOM根元素上,新插入的元素冒泡事件到根元素,根据冒泡的event.target确定是否执行绑定的函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式