如何防止使用jQuery双击?

Nat*_*Pet 54 jquery double-click

我有一个按钮:

<input type="submit" id="submit" value="Save" />
Run Code Online (Sandbox Code Playgroud)

在jQuery中我使用以下内容,但它仍然允许双击:

<script type="text/javascript">

$(document).ready(function () {

    $("#submit").one('click', function (event) {  
Run Code Online (Sandbox Code Playgroud)

有关如何防止双击的任何想法?

ade*_*neo 71

jQuery的one()将为每个绑定的元素触发附加的事件处理程序,然后删除事件处理程序.

如果由于某些原因不符合要求,也可以在点击后完全禁用该按钮.

$(document).ready(function () {
     $("#submit").one('click', function (event) {  
           event.preventDefault();
           //do something
           $(this).prop('disabled', true);
     });
});
Run Code Online (Sandbox Code Playgroud)

应该注意的是,使用ID submit可能会导致问题,因为它会form.submit通过引用该元素来覆盖该函数.

  • 不,one()工作正常,它只运行绑定功能一次,但由于它是一个常规按钮,你可以点击它直到你的手指受伤.只有停止它的方法,就是像上面一样禁用它,或者阻止默认发送表单,这样按钮就不会做任何事情,无论如何你都应该这样做,否则页面会重新加载,所有的javascript函数都会重新启动,无论如何这些解决方案都无法解决. (4认同)
  • 如果你禁用了!然后按钮不回发!你有任何解决方案,只需点击一下即可完成整个表格处理吗? (2认同)
  • 在我的情况下,它工作,因为我提交后页面刷新!其他人应该记住,单击后该按钮将无用 (2认同)

Kic*_*rum 26

还有一个解决方案:

$('a').on('click', function(e){
    var $link = $(e.target);
    e.preventDefault();
    if(!$link.data('lockedAt') || +new Date() - $link.data('lockedAt') > 300) {
        doSomething();
    }
    $link.data('lockedAt', +new Date());
});
Run Code Online (Sandbox Code Playgroud)

在这里,我们将最后一次点击的时间保存为数据属性,然后检查之前的点击是否超过0.3秒.如果它是假的(少于0.3秒前),只需更新最后点击时间,如果是,则执行某些操作.

jsbin


小智 16

我发现大多数解决方案都不适用于标签或DIV等元素的点击(例如,使用Kendo控件时).所以我做了这个简单的解决方案

function isDoubleClicked(element) {
    //if already clicked return TRUE to indicate this click is not allowed
    if (element.data("isclicked")) return true;

    //mark as clicked for 1 second
    element.data("isclicked", true);
    setTimeout(function () {
        element.removeData("isclicked");
    }, 1000);

    //return FALSE to indicate this click was allowed
    return false;
}
Run Code Online (Sandbox Code Playgroud)

在您必须决定开始活动的地方使用它:

$('#button').on("click", function () {
    if (isDoubleClicked($(this))) return;

    ..continue...
});
Run Code Online (Sandbox Code Playgroud)


Pan*_*gui 12

我的解决方案:https://gist.github.com/pangui/86b5e0610b53ddf28f94它可以防止双击,但在1秒后接受更多点击.希望能帮助到你.

这是代码:

jQuery.fn.preventDoubleClick = function() {
  $(this).on('click', function(e){
    var $el = $(this);
    if($el.data('clicked')){
      // Previously clicked, stop actions
      e.preventDefault();
      e.stopPropagation();
    }else{
      // Mark to ignore next click
      $el.data('clicked', true);
      // Unmark after 1 second
      window.setTimeout(function(){
        $el.removeData('clicked');
      }, 1000)
    }
  });
  return this;
}; 
Run Code Online (Sandbox Code Playgroud)


Eti*_*nne 11

在我的情况下,jQuery有一些副作用(在IE8中),我最终使用以下内容:

$(document).ready(function(){
  $("*").dblclick(function(e){
    e.preventDefault();
  });
});
Run Code Online (Sandbox Code Playgroud)

它非常好用,看起来更简单.在那里找到它:http://www.jquerybyexample.net/2013/01/disable-mouse-double-click-using-javascript-or-jquery.html


小智 6

只需将此方法放入您的表单中,它就会一次性处理双击或多次点击。一旦请求发送,它将不允许一次又一次地发送请求。

<script type="text/javascript">
    $(document).ready(function(){
            $("form").submit(function() {
                $(this).submit(function() {
                    return false;
                });
                return true;
            }); 
    }); 
</script>
Run Code Online (Sandbox Code Playgroud)

它肯定会帮助你。


小智 5

“十分简单”

$(function() {
     $('.targetClass').dblclick(false);
});
Run Code Online (Sandbox Code Playgroud)