JQuery:如何使用“委托”代替“直播”?

时间:2010-04-29 15:53:03

标签: javascript jquery javascript-events

我读过无数文章,如何使用JQuery delegate比使用“live”事件更有效。

因此,我无法将现有的Live代码转换为使用Delegate。

$("#tabs li:eq(0)").live('click',function(){ //...code });
$('#A > div.listing, #B > div.listing, #C > div.listing').live('mouseover',function(){ // ...code });

当我用我认为更高效的委托代码替换以前的代码时,我的页面不会加载。

$("#tabs li:eq(0)").delegate('click',function(){ //...code });
$('#A > div.listing, #B > div.listing, #C > div.listing').delegate('mouseover',function(){ // ...code });

知道为什么我的委托代码不起作用?另外,有关如何提高效率的任何建议吗?

更新

问题的思考部分是,在页面加载时,网页上不会出现“#tabs”和“#A,#B,#C”。这些属性通过AJAX调用动态插入到页面上。因此,这是否意味着我必须使用live over delegate?

1 个答案:

答案 0 :(得分:2)

您的更新更新:) - 是的,如果是这种情况,请坚持使用.live(),除非您的DOM 非常深,否则无限小性能差异。


上一个回答:您的委托功能应如下所示:

$("#tabs").delegate('li:eq(0)', 'click', function(){ //...code });
$('#A, #B, #C').delegate('> div.listing', 'mouseover', function(){ // ...code });

这取决于#tabs不在作为任何ajax调用的一部分而被替换的内容中,#A#B#C相同。 .delegate()的格式为:

$(selectorOrNonReplacedParent).delegate(childSelector, event, function);