Javascript 使用jQuery防止双击链接

Javascript 使用jQuery防止双击链接,javascript,jquery,Javascript,Jquery,使用jQuery防止双击链接的最佳方法是什么 我有一个触发ajax调用的链接,当ajax调用返回时,它会显示一条消息 问题是,如果在ajax调用返回之前双击或单击两次,页面上就会出现两条消息,而实际上我只需要一条 我需要一个按钮上的禁用属性。但这对链接不起作用 $('a').on('click', function(e){ e.preventDefault(); //do ajax call }); 您可以使用属性,如下所示: $('a').on('click', funct

使用jQuery防止双击链接的最佳方法是什么

我有一个触发ajax调用的链接,当ajax调用返回时,它会显示一条消息

问题是,如果在ajax调用返回之前双击或单击两次,页面上就会出现两条消息,而实际上我只需要一条

我需要一个按钮上的
禁用属性。但这对链接不起作用

$('a').on('click', function(e){
    e.preventDefault();

    //do ajax call
});
您可以使用属性,如下所示:

$('a').on('click', function () {
   var $this = $(this);
   var alreadyClicked = $this.data('clicked');
   if (alreadyClicked) {
      return false;
   }
   $this.data('clicked', true);
   $.ajax({
      //some options
      success: function (data) { //or complete
         //stuff
         $this.data('clicked', false);
      }
   })
});
您可以使用属性,如下所示:

$('a').on('click', function () {
   var $this = $(this);
   var alreadyClicked = $this.data('clicked');
   if (alreadyClicked) {
      return false;
   }
   $this.data('clicked', true);
   $.ajax({
      //some options
      success: function (data) { //or complete
         //stuff
         $this.data('clicked', false);
      }
   })
});

您可以使用Jquery第二次禁用该链接上的单击事件

$(this).unbind('click');
请参阅此JSFIDLE以获取参考

您可以使用Jquery再次禁用该链接上的单击事件

$(this).unbind('click');
请参阅此JSFIDLE以获取参考

您可以为此使用虚拟类

$('a#anchorID').bind('click',function(){
           if($(this).hasClass('alreadyClicked')){
              return false;
           }else{
                $(this).addClass('alreadyClicked);
                $/ajax({
                    success: function(){$('a#anchorID').removeClass('alreadyClicked');},
                    error: function(){$('a#anchorID').removeClass('alreadyClicked');}
                });
           }});

您可以为此使用虚拟类

$('a#anchorID').bind('click',function(){
           if($(this).hasClass('alreadyClicked')){
              return false;
           }else{
                $(this).addClass('alreadyClicked);
                $/ajax({
                    success: function(){$('a#anchorID').removeClass('alreadyClicked');},
                    error: function(){$('a#anchorID').removeClass('alreadyClicked');}
                });
           }});

您可以禁用链接(例如,
href=“#”
),并使用
单击
事件,使用jQuery
one()
函数绑定到链接。

您可以禁用链接(例如,
href=“#”
),并使用
单击
事件,使用jQuery
one()绑定到链接
函数。

使用类“button”绑定所有链接,然后尝试以下操作:

$("a.button").click(function() { $(this).attr("disabled", "disabled"); });
$(document).click(function(evt) {
     if ($(evt.target).is("a[disabled]"))
          return false;
});

使用类“button”绑定所有链接并尝试以下操作:

$("a.button").click(function() { $(this).attr("disabled", "disabled"); });
$(document).click(function(evt) {
     if ($(evt.target).is("a[disabled]"))
          return false;
});
您需要

默认情况下,所有请求都是异步发送的(即,默认情况下设置为true)。如果需要同步请求,请将此选项设置为
false

$.ajax({
      async: false,
      success: function (data) { 

         //your message here
      }
   })
您需要

默认情况下,所有请求都是异步发送的(即,默认情况下设置为true)。如果需要同步请求,请将此选项设置为
false

$.ajax({
      async: false,
      success: function (data) { 

         //your message here
      }
   })
。您可以在第一次单击后通过CSS属性禁用按钮(并在ajax请求后或使用setTimeout删除此属性),或者使用jQuery.one()函数在第一次单击后删除触发器(而不禁用按钮)

var normal_按钮=$(“#normal”),
一个按钮=$(“#一”),
禁用按钮=$(“#禁用”),
结果=$(“#结果”);
正常按钮('点击',功能(){
result.removeClass('hide').append(normal_button.html()+'
); }); 一个按钮。一个('click',函数(){ result.removeClass('hide').append(one_button.html()+'
); }); 禁用按钮('单击',功能(){ 禁用按钮属性('disabled',true); setTimeout(函数(){ result.removeClass('hide').append(禁用了_button.html()+'
); }, 2000); });
。您可以在第一次单击后通过CSS属性禁用按钮(并在ajax请求后或使用setTimeout删除此属性),或者使用jQuery.one()函数在第一次单击后删除触发器(而不禁用按钮)

var normal_按钮=$(“#normal”),
一个按钮=$(“#一”),
禁用按钮=$(“#禁用”),
结果=$(“#结果”);
正常按钮('点击',功能(){
result.removeClass('hide').append(normal_button.html()+'
); }); 一个按钮。一个('click',函数(){ result.removeClass('hide').append(one_button.html()+'
); }); 禁用按钮('单击',功能(){ 禁用按钮属性('disabled',true); setTimeout(函数(){ result.removeClass('hide').append(禁用了_button.html()+'
); }, 2000); });
我带来了下一个简单的jquery插件:

(function($) {
  $.fn.oneclick = function() {
    $(this).one('click', function() {
      $(this).click(function() { return false; });
    });
  };
  // auto discover one-click elements
  $(function() { $('[data-oneclick]').oneclick(); });
}(jQuery || Zepto));

// Then apply to selected elements
$('a.oneclick').oneclick();
或者只需在html中添加自定义数据atribute:

<a data-oneclick href="/">One click</a>

我带来了下一个简单的jquery插件:

(function($) {
  $.fn.oneclick = function() {
    $(this).one('click', function() {
      $(this).click(function() { return false; });
    });
  };
  // auto discover one-click elements
  $(function() { $('[data-oneclick]').oneclick(); });
}(jQuery || Zepto));

// Then apply to selected elements
$('a.oneclick').oneclick();
或者只需在html中添加自定义数据atribute:

<a data-oneclick href="/">One click</a>

虽然提供了一些很好的解决方案,但我最终使用的方法是只使用一个
,我可以设置
disabled
属性


有时最简单的解决方案是最好的。

虽然有一些很好的解决方案,但我最终使用的方法是只使用一个
,我可以设置
禁用的
属性



有时最简单的解决方案是最好的。

你能添加你的代码或JSFIDLE吗?我还没有。这可能是
on()
off()
的重复->你能添加你的代码或JSFIDLE吗?我还没有。这可能是
on()
off()
的重复->我说的链接。不是表单/按钮你没有指定你的代码,所以我只是给出了你的提示,通过它你可以达到你的要求。不是表单/按钮你没有指定你的代码,所以我只是给出了你的提示,你可以通过它来实现你的要求。这对我有什么帮助?一旦收到第一个请求的响应,这将发送下一个请求。我得试一试。如果有人捣乱链接,他们会排队吗?如果设置async:true,那么该语句将开始执行,并调用下一个语句,而不管该async语句是否已完成yetSetting
async:true
将冻结浏览器,直到请求完成为止,这打破了AJAX的异步特性。这是什么收到吗?一旦收到第一个请求的响应,就会发送下一个请求。我得试一试。如果有人捣乱链接,他们会排队吗?如果设置async:true,那么该语句将开始执行,并且将调用下一个语句,而不管该async语句是否已完成yetSetting
async:true
将冻结浏览器,直到请求完成为止,这与AJAX的异步特性不同。