单击1后禁用jqueryfunction,以防止多次执行

我有以下function,它可以获取超出默认情况下显示的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=&type=1&owner=&more=1", success: function(data) { $('.discussion-more').after(data); $(".discussion-more").hide(); } }; $.ajax(ajaxOpts); return false; }); 

它的工作原理,唯一的问题是,用户可以非常快速地点击按钮3次,并且它会向ajax_getcomments.php发送3个请求,每次都获得相同的结果集。

我尝试添加

 $(".more_comments_link").unbind('click'); 

但它没有做任何事情。

初始结果集也是用jquery获取的,因此我使用.live(click'

不确定它是否与它不起作用有关。

live不与unbind – 你需要die不是。

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

 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=&type=1&owner=&more=1", success: function (data) { $('.discussion-more').after(data); $(".discussion-more").hide(); }, complete: function() { requestRunning = false; } }; requestRunning = true; $.ajax(ajaxOpts); return false; }); 

对于一个非常简单的解决方案,所有这些解决方案都非常复杂; 根据以下文档使用.one():

http://api.jquery.com/one/

只需将live更改为one 。 见下文:

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

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

  • live
  • die

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

尝试使用disabled关键字。 这样您就不必解除绑定function,只需将其禁用即可:

 $('.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=&type=1&owner=&more=1", success: function(data) { $('.discussion-more').after(data); $(".discussion-more").hide(); } }; $.ajax(ajaxOpts); return false; }); 

根据您的使用情况,您可能不必使用live ,在这种情况下,您可以完全按照自己的意愿执行操作。

 $('.more_comments_link').live('click', function(e) { if($(e.target).data('oneclicked')!='yes') { $(this).text("Fetching More Comments ..."); var ajaxOpts = { type: "get", url: "ajax_getcomments.php", dataType: 'json', data: "&itemid=&type=1&owner=&more=1", success: function(data) { $('.discussion-more').after(data); $(".discussion-more").hide(); } }; $.ajax(ajaxOpts); return false; } $(e.target).data('oneclicked','yes'); }); 

对我来说,这工作:

 $('.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(){ });