javascript – jQuery .load()如何防止双击加载双重加载

前端之家收集整理的这篇文章主要介绍了javascript – jQuery .load()如何防止双击加载双重加载前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我使用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)中查找的元素.如果包装器没有包裹在任何元件中,那么包装器也可以是主体.

原文链接:https://www.f2er.com/jquery/427995.html

猜你在找的jQuery相关文章