【问题标题】:Multiple submit Button click problem?多个提交按钮点击问题?
【发布时间】:2010-10-19 10:11:59
【问题描述】:

我有一个表单,可以在单击提交按钮时在 DB 中插入数据,但问题是当客户端多次单击该按钮时,它会发送多个创建请求,这意味着同一数据的同一时间有多个按钮单击事件,但不能这样。

当客户端第一次单击提交按钮时,我尝试禁用该按钮,但此后它不会调用服务器单击事件处理程序,也不会在它被禁用后触发服务器单击事件。

如何处理这个多次点击问题..

我使用以下代码禁用按钮

 <script type="text/javascript">
     function checkAuth(obj)
     {
         if(Page_ClientValidate("ValidationGroupName"))
            obj.disabled=true;      
     }
 </script>

        <asp:Button ID="btnSubmit" runat="server" Text="Submit" 
OnClick="btnSubmit_click" OnClientClick="checkAuth(this)" CssClass="FormButton" 
ValidationGroup="ValidationGroupName" />

【问题讨论】:

标签: javascript .net asp.net events onclick


【解决方案1】:

不要禁用按钮,只是阻止第二次提交。

这个小脚本可以完成这项工作,但它假定在某个时刻有回发。

var formhandler = function() {
   var submit, isSubmit = false;
   submit = function(){
                // flop and return false once by the use of operator order.
    return isSubmit != (isSubmit = true);
    };
    return {
       submit: submit
    };
}(); // <-- use direct invcation to keep the internal variables "static"

附上:

   document.forms[0].onsubmit = formhandler.submit;    

   OnClientClick = "formhandler.submit()";

【讨论】:

  • @Caspar Kleijne :此代码是否适用于 Imagebutton 或者它需要一个带有 submitBehaviour = true 的按钮。我想将此代码与用于转账的图像按钮一起使用。这是否足以防止在浏览器或网络挂起并且客户端继续点击的情况下多次点击??
  • 它适用于任何附加了 onsubmit 事件处理程序的元素。
【解决方案2】:

&lt;input type="hidden"&gt; 字段中包含唯一 ID。然后在服务器上检查请求是否已被处理。

作为 ID,您可以生成 GUID。然后你只需要一些结构来收集当前有效的 ID。例如字典。然后你可以不时从结构中清除旧 ID,当然在使用时将其删除。

【讨论】:

  • 我很想用这个,但你能详细说明一下吗?
【解决方案3】:

您所要做的就是拥有一些禁用按钮的客户端javascript。类似于:

document.myform.mybutton.disabled  = true;

如果你将它包装在一个函数中,并设置你的按钮的onClientClick 属性来触发它。一旦点击它就会被禁用 - 但仍会向服务器生成请求。

事件没有按照您上面建议的方式触发的原因可能是因为您禁用了服务器端(不是这里的客户端)

【讨论】:

  • 使用这种技术时必须小心。例如,如果请求使用 AJAX 并且由于连接问题而失败,则用户最终会遇到一个损坏的网站。多发还有其他原因(比如刷新目标页面)
  • 是的 - 但这个问题没有 AJAX 标签
  • 查看我添加的用于禁用按钮的代码的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
相关资源
最近更新 更多