Asp.net

當我禁用送出按鈕以防止點兩下時,為什麼我的表單沒有發布?

  • August 29, 2014

像地球上的其他 Web 開發人員一樣,我遇到了使用者點兩下表單上的送出按鈕的問題。我的理解是,處理此問題的正常方法是在第一次點擊後立即禁用按鈕,但是當我這樣做時,它不會發布.

我確實對此進行了一些研究,上帝知道有足夠的資訊,但是其他問題,例如Disable button on form submission,禁用按鈕似乎有效。送出後禁用按鈕的原始海報似乎和我有同樣的問題,但沒有提到他如何/如果他解決了這個問題。

這是一些關於如何重複它的程式碼(在 IE8 Beta2 中測試,但在 IE7 中有同樣的問題)

我的aspx程式碼

<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<script language="javascript" type="text/javascript">
   function btn_onClick()
   {
       var chk = document.getElementById("chk");
       if(chk.checked)
       {
           var btn = document.getElementById("btn");
           btn.disabled = true;
       }
   }
</script>
<body>
   <form id="form1" runat="server">
       <asp:Literal ID="lit" Text="--:--:--" runat="server" />
       <br />
       <asp:Button ID="btn" Text="Submit" runat="server" />
       <br />
       <input type="checkbox" id="chk" />Disable button on first click
   </form>
</body>
</html>

我的cs程式碼

using System;

public partial class _Default : System.Web.UI.Page 
{
   protected override void OnInit(EventArgs e)
   {
       base.OnInit(e);
       btn.Click += new EventHandler(btn_Click);
       btn.OnClientClick = "btn_onClick();";
   }

   void btn_Click(object sender, EventArgs e)
   {
       lit.Text = DateTime.Now.ToString("HH:mm:ss");
   }
}

請注意,當您點擊按鈕時,會發生回發,並且時間會更新。但是當您選中該複選框時,下次點擊該按鈕時,該按鈕被禁用(如預期的那樣),但永遠不會回發。

我到底在想什麼???

提前致謝。

我認為您只是缺少此標籤:

UseSubmitBehavior="false"

試試這樣:

<asp:Button ID="btnUpdate" runat="server" UseSubmitBehavior="false" OnClientClick="if(Page_ClientValidate()) { this.disabled = true; } else {return false;}" Text = "Update" CssClass="button" OnClick="btnUpdate_Click" ValidationGroup="vgNew"/>

解釋

fall888 是對的,您的方法不適用於跨瀏覽器。我使用這個小片段來防止點兩下。

引用自:https://stackoverflow.com/questions/400616