0

这行得通。

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

但是,当用户在同一页面上通过 ajax 导航到其他记录时,我们得到了令人讨厌的刷新。(并不比我对这种情况如何发生的无知更令人恼火)。

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

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

我仍然得到了令人讨厌的刷新。

如果我将其更改为 live,我将得到它而没有刷新。

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

我在stackoverflow上读到我们应该使用delegate而不是live,但是在这种情况下,live似乎可以完成这项工作,而delegate却没有。或者,我用错了吗?

更新: 因此,通过使用与上述相同的示例,使用on :

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

我仍然刷新了页面。

请指教,

4

3 回答 3

3

简短的回答

.live()可以(并且应该)总是被替换为.delegate().on()从 jQuery 1.7 开始)。

例子

而不是这样做:

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

总是可以这样做:

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

为什么.live().delegate()(或.on())替换

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

笔记

这并不意味着您应该完全按照上面列出的内容进行操作 - 您应该选择较小的元素而不是文档。

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

编辑:同样使用.on()

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

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

但同样,附加事件处理程序document并不是一个好主意,因为其中发生的所有事件都会影响站点性能。

更具体的解决方案

在您的情况下应该工作的确切代码是这样的:

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

它不适用于您的情况的原因可能是以下之一:

  1. 您使用早于 1.7 的 jQuery(其中.on()不可用)。
  2. 选择器匹配的元素#morespecifcelement在文档准备好时不存在(后面可能会介绍)。
于 2012-07-03T17:46:22.683 回答
1

尝试

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

}
于 2012-07-03T17:29:53.747 回答
0

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

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

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

于 2012-07-03T17:37:45.683 回答