防止用jQuery双击链接

时间:2013-09-29 06:55:24

标签: javascript jquery

阻止双击jQuery链接的最佳方法是什么?

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

问题是如果我在ajax调用返回之前双击,或者单击它两次,当我真的只想要一个时,我会在页面上显示两条消息。

我需要按钮上的disabled属性。但这不适用于链接。

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

    //do ajax call
});

9 个答案:

答案 0 :(得分:7)

您可以使用data-属性,如下所示:

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

答案 1 :(得分:5)

我带来了下一个简单的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中添加自定义数据属性:

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

答案 2 :(得分:1)

你可以使用虚拟类。

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

答案 3 :(得分:1)

您需要 async:false

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

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

         //your message here
      }
   })

答案 4 :(得分:0)

Check this example。您可以在第一次单击后通过CSS属性禁用该按钮(并在ajax请求或使用setTimeout后删除此属性)或使用jQuery.one()函数在第一次单击后删除触发器(不禁用按钮)< / p>

var normal_button = $('#normal'),
  one_button = $('#one'),
  disabled_button = $('#disabled'),
  result = $('#result');

normal_button.on('click', function () {
  result.removeClass('hide').append(normal_button.html()+'<br/>');
});

one_button.one('click', function () {
  result.removeClass('hide').append(one_button.html()+'<br/>');
});

disabled_button.on('click', function () {
  disabled_button.attr('disabled', true);
  setTimeout(function () {
    result.removeClass('hide').append(disabled_button.html()+'<br/>');
  }, 2000);
});

答案 5 :(得分:0)

虽然提供了一些很好的解决方案,但我最终使用的方法是使用<button class="link">我可以设置disabled属性。

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

答案 6 :(得分:-1)

您可以使用Jquery

第二次在该链接上禁用click事件
$(this).unbind('click');

请参阅此jsfiddle以供参考 Demo

答案 7 :(得分:-1)

您可以停用链接(例如,href="#"),然后使用click事件,使用jQuery one()函数绑定到链接。

答案 8 :(得分:-1)

将所有链接与“按钮”类绑定并尝试:

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