2012-06-13 75 views
3

可能重复:
Need to cancel click/mouseup events when double-click event detected
Preventing double-click of Submit button只能提交一次

我有以下功能

$("#btnSubmit").click(function(){ 
       $("#btnSubmit").attr("disabled", "disabled"); 
      ....make ajax request 
       $("#btnSubmit").removeAttr("disabled"); 

} 

问题是,我要处理的第1点击的双击。或者单击一次。因为当用户双击时它会运行两次函数。如果我使用.one(),它将只处理单击。但我也想处理双击,但只处理一次。什么解决方案?

+4

在Web应用程序中处理单击和双击几乎是不可能的,出于可用性原因,处理一个可怕的想法。 – Pointy

+0

你也应该使用“.prop()”来设置/取消设置“disabled”属性:'.prop(“disabled”,true)'或'.prop(“disabled”,false)'。 – Pointy

+0

第一次点击后,我会禁用按钮。 – powtac

回答

2

使用

dblclick()

,而不是click()

了解更多关于.dblclick()

你的代码看起来应该像

$("#btnSubmit").dblclick(function(){ 
    $("#btnSubmit").attr("disabled", "disabled"); 
    $("#btnSubmit").removeAttr("disabled"); 
}); 

您可以使用一个标志

var alreadyClicked = false; 
$("#btnSubmit").click(function(){ 
    if(alreadyClicked) { 
     alreadyClicked = false; 
     return false; 
    } else { 
    alreadyClicked = true; 
    $("#btnSubmit").attr("disabled", "disabled"); 
    $("#btnSubmit").removeAttr("disabled"); 
    } 
}); 
+0

纯JS文档:https://developer.mozilla.org/en/DOM/element.ondblclick – StuperUser

+3

这不会处理单击。 – 2012-06-13 16:00:17

+0

第二代码块不会区分双击与随后的单击。所以一旦点击一个按钮,用户将无法提交数据更改。 –

1

设置一个定点变量来阻止进一步的点击来自于直到AJAX请求完成所作用:

var clicked = false; 
$("#btnSubmit").click(function(){ 
    if (clicked) { 
     return; 
    } else { 
     clicked = true; 
    } 
    $.ajax({ 
     success: function() { 
      clicked = false; 
    }); 
}); 
0

我的解决方案将停止双击我检查了当按下按钮时变量。

会发生什么是click变量作为检查来查看函数当前是否正在运行。

var click = false; 
$("#btnSubmit").click(function(){ 

    if (click == false) { 
    click = true; 

    $("#btnSubmit").attr("disabled", "disabled"); 

    //make ajax request 

    $("#btnSubmit").removeAttr("disabled"); 

    click = false; 
    } 
} 
相关问题