这很有效。
$(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;
});
});
我仍然刷新页面。
请建议,
答案 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
它在你的情况下不起作用的原因可能是其中之一:
$(document).ready(function(){
$(document).on('click','.items article', function(event) {
window.location=$(this).find("a").attr("href");
return false;
});
});
不可用)。.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>
的默认操作元素无论如何?