jQuery .load()如何防止双击加倍

dev*_*s11 5 javascript jquery load onclick

我使用jQuery load()函数将一些页面加载到容器中.这是代码:

$('div.next a').live('click',function() {

    $('.content').load('page/3/ #info','',function(){
        //do something
    });

return false;

});
Run Code Online (Sandbox Code Playgroud)

一切正常,但问题是当我快速双击div.next链接时,从控制台我看到它加载页面两次因为我快速双击.我甚至可以点击3次,它会加载3次并在控制台中显示如下:

GET http://site/page/3/     200     OK  270ms   
GET http://site/page/3/     200     OK  260ms
Run Code Online (Sandbox Code Playgroud)

我的问题是如何防止这种双击,并且无论点击多少次都不要再加载目标页面一次.

谢谢.

Osc*_*son 1

优秀的 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;
});
Run Code Online (Sandbox Code Playgroud)

顺便说一句,永远永远永远不要使用.live(). 使用 .delegate 代替,例如:

var hasBeenClicked = false;

$('div.next').delegate('a','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;
});
Run Code Online (Sandbox Code Playgroud)

为什么?保罗·爱尔兰解释道:http ://paulirish.com/2010/on-jquery-live/

为了回答你的评论...

如果您将委托函数嵌套在 AJAX 调用( 、 等)中,则可能会发生这种.load()情况.get()。必须div.next位于页面上才能正常工作。如果div.next页面上没有,并且不是嵌套的,只需执行以下操作:

$('#wrapper').delegate('div.next a','click',function() {
Run Code Online (Sandbox Code Playgroud)

http://api.jquery.com/delegate/

委托需要选择器是动态添加元素的父元素。然后,委托的第一个参数(div.next a在上一个示例中)是要在所选元素 ( ) 中查找的元素#wrapperbody如果包装器没有包装在任何元素中,也可能是这样。