我使用jQuery load()函数将一些页面加载到容器中.这是代码:
$('div.next a').live('click',function() {
$('.content').load('page/3/ #info','',function(){
//do something
});
return false;
});
一切正常,但问题是当我快速双击div.next链接时,从控制台我看到它加载页面两次因为我快速双击.我甚至可以点击3次,它会加载3次并在控制台中显示如下:
GET http://site/page/3/ 200 OK 270ms
GET http://site/page/3/ 200 OK 260ms
我的问题是如何防止这种双击,并且无论点击多少次都不要再加载目标页面一次.
谢谢.
最佳答案
无论发生什么好的’JavaScript’?为什么你们都试图用纯粹的jQuery来解决这个问题?
var hasBeenClicked = false;
$('div.next a').live('click',function() {
if(!hasBeenClicked){
hasBeenClicked = true;
$('.content').load('page/3/ #info',function(){
//do something
//If you want it clickable AFTER it loads just uncomment the next line
//hasBeenClicked = false;
});
}
return false;
});
作为旁注,永远不要永远不要使用.live().使用.delegate代替:
var hasBeenClicked = false;
$('div.next').delegate('a','click',function(){
//do something
//If you want it clickable AFTER it loads just uncomment the next line
//hasBeenClicked = false;
});
}
return false;
});
为什么? Paul Irish解释说:http://paulirish.com/2010/on-jquery-live/
回答你的评论……
如果您的委托函数嵌套在AJAX调用(.load(),. get()等)中,则可能会发生这种情况. div.next必须在页面上才能工作.如果页面上没有div.next,并且这不是嵌套的,只需执行以下操作:
$('#wrapper').delegate('div.next a',function() {
http://api.jquery.com/delegate/
委托需要选择器作为动态添加元素的父级.然后,委托的第一个参数(在最后一个示例中为div.next a)是在所选元素(#wrapper)中查找的元素.如果包装器没有包裹在任何元件中,那么包装器也可以是主体.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。