在这种情况下,我们可以为代表替换live吗?

时间:2012-07-03 17:28:08

标签: jquery

这很有效。

$(document).ready(function(){
        $(".items article").click(function(){
            window.location=$(this).find("a").attr("href"); 
            return false;
         });
    });

然而,当用户通过同一页面上的ajax导航到其他记录时,我们得到了刺激性的刷新。 (并不是因为我对bww如何发生的无知感到刺激)。

如果我更改代码以使用委托:

$(document).ready(function(){
        $(".items article").delegate('click', function(){
            window.location=$(this).find("a").attr("href"); 
            return false;
         });
    });

我仍然感到烦躁不安。

如果我将其更改为直播,我无需刷新即可获得它。

$(document).ready(function(){
        $(".items article").live('click', function(){
            window.location=$(this).find("a").attr("href"); 
            return false;
         });
    });

我已经阅读了stackoverflow,我们应该使用委托代替live,但是,在这种情况下,live似乎可以完成工作,而委托却没有。或者,我错误地使用它了吗?

更新 所以,并使用 on ,采用与上面相同的示例:

$(document).ready(function(){ 
 $('#morespecifcelement').on('click','.items article', function() { 
  window.location=$(this).find("a").attr("href"); return false; 
 });
});

我仍然刷新页面。

请建议,

3 个答案:

答案 0 :(得分:3)

简短回答

.live()可以(并且)始终被.delegate()替换(自jQuery 1.7以来.on())。

实施例

而不是:

jQuery(selector).live(event_type, handler);

您可以始终执行:

jQuery(document).delegate(selector, event_type, handler);

为什么用.live()(或.delegate()

替换.on()

你应该避免使用.live(),因为它效率很低:它首先执行selector(即使该元素尚不存在,因此无法找到)然后将自身附加到{{1 (这又是低效的),除非你将使用未记录的参数(据我所知,在较新版本的jQuery中被禁用)。

注意

这并不意味着你应该完全按照上面列出的那样做 - 你应该选择较小的元素而不是文档。

从jQuery 1.7开始,您应该使用document而不是.on().delegate()

编辑:使用.live()

相同

这段代码与前面列出的示例完全相同(除了以更有效和现代的方式):

.on()

但是,将事件处理程序附加到jQuery(document).on(event_type, selector, handler); 并不是一个好主意,因为其中发生的所有事件都会影响网站性能。

更具体的解决方案

在您的情况下应该适用的确切代码是:

document

它在你的情况下不起作用的原因可能是其中之一:

  1. 您使用的是早于1.7的jQuery(其中$(document).ready(function(){ $(document).on('click','.items article', function(event) { window.location=$(this).find("a").attr("href"); return false; }); }); 不可用)。
  2. 当文档准备就绪时,.on()选择器匹配的元素不存在(可能稍后介绍)。

答案 1 :(得分:1)

尝试

$(document).delegate(".items article","click",function(){

}

答案 2 :(得分:0)

如果使用jQuery 1.7+,你应该这样做:

$(document).ready(function(){
    $(document).on('click', '.items article', function(){
        window.location=$('a', this).attr("href"); 
        return false;
     });
});

最好的解决方案可能是修复以前做错的事情,以保证使用javascript从链接获取href属性并重定向到该地址,因为这通常是<a>的默认操作元素无论如何?