Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
单击一次后禁用jquery功能,以防止多次执行_Jquery - Fatal编程技术网

单击一次后禁用jquery功能,以防止多次执行

单击一次后禁用jquery功能,以防止多次执行,jquery,Jquery,我有下面的函数,它获取默认显示的20条注释之外的更多注释 $('.more_comments_link').live('click', function() { $(".more_comments_link").text("Fetching More Comments ..."); var ajaxOpts = { type: "get", url: "ajax_getcomments.php",

我有下面的函数,它获取默认显示的20条注释之外的更多注释

$('.more_comments_link').live('click', function() {
        $(".more_comments_link").text("Fetching More Comments ...");

        var ajaxOpts = {
            type: "get",
            url: "ajax_getcomments.php",
            dataType: 'json',
            data: "&itemid=<? echo $id; ?>&type=1&owner=<? echo $event["data"]["e_creator"]; ?>&more=1",
            success: function(data) {
                $('.discussion-more').after(data);
                $(".discussion-more").hide();
            }
        };

        $.ajax(ajaxOpts);
        return false;
    }); 
但它什么也没用

初始结果集也是通过jquery获取的,因此我使用
.live(单击“

不确定它是否与不工作的原因有关。

您可以使用
.die()
取消绑定
.live()
事件


或者在其他位置设置一个标志,表明请求正在进行,并检查单击处理程序的开头。

尝试使用disabled关键字。这样,您不必解除绑定该函数,只需禁用它:

$('.more_comments_link').live('click', function() {
    $(this).attr("disabled", true);
    $(".more_comments_link").text("Fetching More Comments ...");

    var ajaxOpts = {
        type: "get",
        url: "ajax_getcomments.php",
        dataType: 'json',
        data: "&itemid=<? echo $id; ?>&type=1&owner=<? echo $event["data"]["e_creator"]; ?>&more=1",
        success: function(data) {
            $('.discussion-more').after(data);
            $(".discussion-more").hide();
        }
    };

    $.ajax(ajaxOpts);
    return false;
}); 
$('.more\u comments\u link').live('click',function()){
$(this.attr(“disabled”,true);
$(“.more_comments_link”).text(“获取更多评论…”);
变量ajaxOpts={
键入:“获取”,
url:“ajax_getcomments.php”,
数据类型:“json”,
数据:“&itemid=&type=1&owner=&more=1”,
成功:功能(数据){
$('.discussion more')。在(数据)之后;
$(“.discussion more”).hide();
}
};
$.ajax(ajaxOpts);
返回false;
}); 

live
无法使用
解除绑定
——您需要这样做

但是有一个更好的解决方案。由于您可能希望能够多次更新内容,您可以设置一个变量以查看请求当前是否正在运行:

var requestRunning = false;
$('.more_comments_link').live('click', function () {
    if (requestRunning) { // don't do anything if an AJAX request is pending
        return;
    }

    $(".more_comments_link").text("Fetching More Comments ...");

    var ajaxOpts = {
        type: "get",
        url: "ajax_getcomments.php",
        dataType: 'json',
        data: "&itemid=<? echo $id; ?>&type=1&owner=<? echo $event["
        data "]["
        e_creator "]; ?>&more=1",
        success: function (data) {
            $('.discussion-more').after(data);
            $(".discussion-more").hide();
        },
        complete: function() {
            requestRunning = false;
        }

    };

    requestRunning = true;
    $.ajax(ajaxOpts);
    return false;
});
var requestRunning=false;
$('.more\u comments\u link')。live('单击',函数(){
if(requestRunning){//如果AJAX请求挂起,则不要执行任何操作
返回;
}
$(“.more_comments_link”).text(“获取更多评论…”);
变量ajaxOpts={
键入:“获取”,
url:“ajax_getcomments.php”,
数据类型:“json”,
数据:“&itemid=&type=1&owner=&more=1”,
成功:功能(数据){
$('.discussion more')。在(数据)之后;
$(“.discussion more”).hide();
},
完成:函数(){
requestRunning=false;
}
};
requestRunning=true;
$.ajax(ajaxOpts);
返回false;
});
$('.更多评论\链接').live('点击'),功能(e){
如果($(e.target).data('oneclicked')!='yes'){
$(this.text(“获取更多注释…”);
变量ajaxOpts={
键入:“获取”,
url:“ajax_getcomments.php”,
数据类型:“json”,
数据:“&itemid=&type=1&owner=&more=1”,
成功:功能(数据){
$('.discussion more')。在(数据)之后;
$(“.discussion more”).hide();
}
};
$.ajax(ajaxOpts);
返回false;
}
$(e.target).data('oneclicked','yes');
}); 

根据您的使用案例,您可能不必使用,在这种情况下,您可以完全按照您的要求使用。

对于一个非常简单的解决方案,所有这些解决方案都非常复杂;请按照此处的文档使用.one()

只需将
live
更改为
one
。如下所示:

$('.more_comments_link').one('click', function() {
对我来说,这很有效:

$('.more_comments_link').live('click', function() {

if(e.handled !== true) // This will prevent event firing more than one time
{
  e.handled = true;
  //your code here...
}

});

我的解决方案,在所有ajax请求上全局工作,如果是活动请求,具有相同url的新请求将被中止。工作正常

var activeRequests = [];

$(document).ajaxComplete(function(e, jqxhr, settings) {
    var i = activeRequests.indexOf(settings.url);
    if (i != -1) {

    setTimeout(function(){ activeRequests.splice(activeRequests.indexOf(settings.url), 1); }, 75);

}
});

$(document).ajaxSend(function(e, jqxhr, settings) {
var i = activeRequests.indexOf(settings.url)
if (i != -1) {
    jqxhr.abort();
    activeRequests.push(settings.url);
}
});
您可以使用:

$('element').off()

这将禁用您正在侦听的组件的任何事件

,您只需单击网页上的按钮即可使用该事件

 $('button id or classs').one('click',function(){    
 });

您将取消绑定语句放在哪里了?@George不管怎样,
。取消绑定('click')
将不起作用,因为侦听器已与
绑定。live()
不是
。click()
绑定('click'))
。这是可行的,但我意识到lonesomeday的建议在我的案例中适用得更好。如果在ajax错误时也将requestRunning设置为false,这是一个很好的解决方案。否则,它将无法在错误后工作。
$('element').off()
 $('button id or classs').one('click',function(){    
 });