2011-12-12 112 views
7

我有以下按鈕的onclick事件。一旦這個事件發生,我想禁用這個按鈕。任何人都可以幫助我理解如何做到這一點?如何在第一次點擊後禁用按鈕

這是我在buttonclick事件上執行的代碼。

protected void Button3_Click(object sender, EventArgs e) 
{ 

    if (Session["login"] != null && Session["db"] != null) 
    { 

     digit b = new digit(); 
     String digitformed = b.formdigit(this.DropDownList1, this.TextBox1, this.TextBox2); 

     chekcount c = new chekcount(); 
     int count = c.getmaxcountforjud_no(digitformed); 
     int addtocount = count + 1; 

     String name = Session["login"].ToString(); 
     String databs = Session["db"].ToString(); 
     String complex_name = name + databs; 

     if (DropDownList2.SelectedItem.Text != "New") 
     { 
      update u = new update(); 
      u.update1(this.Editor1, digitformed, this.TextBox3, complex_name, name, this.DropDownList2); 
      Response.Write(@"<script language='javascript'>alert('Updated')</script>"); 

     } 
     else 
     { 
      save d = new save(); 
      d.dosave(this.Editor1, addtocount, digitformed, this.TextBox3, complex_name, name); 
      Response.Write(@"<script language='javascript'>alert('Saved')</script>"); 

     } 
    } 
    else 
    { 
     Response.Redirect("log.aspx"); 
    } 
} 

這是我想禁用的按鈕。

<asp:Button ID="Button3" runat="server" Text="Save" onclick="Button3_Click" 
        Visible="False" /> 
+4

設置爲false在單擊處理按鈕的Enabled屬性。 – adatapost

+1

當你想要這個按鈕被禁用嗎?客戶端還是服務器回發後 –

回答

12

你有沒有試過?:

protected void Button3_Click(object sender, EventArgs e) 
{ 
    Button3.Enabled = false; 
    //rest of code 
} 
+3

這樣就不會在用戶的瀏覽器中禁用按鈕,他們仍然可以反覆點擊按鈕不受限制。 – JDPeckham

2

請參見標碼

protected void Button3_Click(object sender, EventArgs e) 
{ 

    ** if (Session["Clicked"] == null) 
     Session["Clicked"] = true; 
    else 
    { 
     Button3.Enabled = false; 
     return; 
    } ** 


    if (Session["login"] != null && Session["db"] != null) 
    { 

     digit b = new digit(); 
     String digitformed = b.formdigit(this.DropDownList1, this.TextBox1, this.TextBox2); 

     chekcount c = new chekcount(); 
     int count = c.getmaxcountforjud_no(digitformed); 
     int addtocount = count + 1; 

     String name = Session["login"].ToString(); 
     String databs = Session["db"].ToString(); 
     String complex_name = name + databs; 

     if (DropDownList2.SelectedItem.Text != "New") 
     { 
      update u = new update(); 
      u.update1(this.Editor1, digitformed, this.TextBox3, complex_name, name, this.DropDownList2); 
      Response.Write(@"<script language='javascript'>alert('Updated')</script>"); 

     } 
     else 
     { 
      save d = new save(); 
      d.dosave(this.Editor1, addtocount, digitformed, this.TextBox3, complex_name, name); 
      Response.Write(@"<script language='javascript'>alert('Saved')</script>"); 

     } 
    } 
    else 
    { 
     Response.Redirect("log.aspx"); 
    } 
} 
1

,如果你想使用jQuery來做到這一點比

$('#button3').attr("disabled", true); 
+0

不應該是$('#button3')。attr(「disabled」,「disabled」)?我認爲它會在Firefox中工作,但不是IE ... – Dave

+0

@Dave: - 這將在所有瀏覽器中工作 –

4
<asp:Button onclick="Button3_Click" ID="Button3" runat="server" Text="Save" 
OnClientClick="this.disabled = true; this.value = 'please wait ..';" 
UseSubmitBehavior="false"  /> 
28

使用按鈕控件的OnClientClick和UseSubmitBehavior屬性。

<asp:Button runat="server" ID="BtnSubmit" 
    OnClientClick="this.disabled = true; this.value = 'Submit in progress...';" 
    UseSubmitBehavior="false" 
    OnClick="BtnSubmit_Click" 
    Text="Click to Submit" /> 

OnClientClick允許您添加客戶端OnClick腳本。在這種情況下,JavaScript將禁用按鈕元素並將其文本值更改爲進度消息。當回發完成時,新呈現的頁面將恢復按鈕回到其初始狀態,無需任何額外的工作。

禁用客戶端上的提交按鈕帶來的一個缺陷是它會取消瀏覽器的提交,並因此取消回發。將UseSubmitBehavior屬性設置爲false會告訴.NET注入必要的客戶端腳本來觸發回發,而不是依賴瀏覽器的表單提交行爲。在這種情況下,注入的代碼將是:

__doPostBack('BtnSubmit','') 

Redered HTML:

<input type="button" name="BtnSubmit" 
    onclick="this.disabled = true; this.value = 'Submitting...';__doPostBack('BtnSubmit','')" 
    value="Submit Me!" id="BtnSubmit" /> 

這應該給你想要的行爲。

來源:http://encosia.com/disable-a-button-control-during-postback/ 信用:戴夫·沃德(微博:@Encosia)

+0

這應該是最好的答案,因爲按鈕將恢復爲在回發後啓用 –

2
///count number of button click 
    var counter = 0; 
    function countclickbutton() { 
     counter++; 
     if (counter > 1) { 
      alert("proessing..please wait."); 
//do not allow to again click 
      return false; 
     } 
     else { 

      return true; 
     } 
    } 

調用這個按鈕的OnClientClick

5

的你需要設置按鈕的Enabled屬性在服務器端代碼詳見其他海報。但是,如果您試圖阻止來自同一個按鈕的多次提交,則需要稍微不同的方式。

的方法添加到您的類:

static void DisableButtonDuringPostback(Page page, Button control) 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.Append("this.disabled = true;"); 
    sb.Append(page.ClientScript.GetPostBackEventReference(control, control.ID.ToString())); 
    sb.Append(";"); 

    control.Attributes.Add("onclick", sb.ToString()); 

} 

在Page_Load中添加

DisableButtonDuringPostback(this.Page, Button3); 
0

這是一個老帖子,但我不認爲它已經完全回答。

首先,在ASP中。NET WebForms中,您向處理請求的Web服務器提交HTTP GET請求,並輸出客戶端HTML代碼供瀏覽器呈現。

當您與服務器端控件進行交互時,值包含在隱藏的VIEWSTATE輸入字段中,用於屬性(例如Enabled的布爾值)。

當你點擊一個按鈕時,它發送一個HTTP POST請求到同一頁上的Web服務器。這就是您點擊按鈕時觸發Page_Load事件的原因。

一旦HTTP POST請求已被處理,它將返回瀏覽器的HTML代碼重新呈現。出於這個原因,如果你在你Page_Load事件下面的代碼:

if (Page.IsPostBack) { Button3.Enabled = false; } 

它不會顯示給已被停用,直到HTTP POST請求已被處理,並返回更新的客戶端代碼的用戶。

從最初的問題看來,服務器似乎需要幾秒鐘才能返回響應,因此多次點擊按鈕時可能會觸發多個回發事件。

解決您的問題的一個簡單(但令人討厭)的方法是讓一個普通的HTML button在JavaScript中執行一個function,它禁用它並觸發服務器端控件的onclick事件。與此相關的問題是,當HTTP POST請求返回響應時,它會將常規HTML button呈現爲啓用狀態。爲了解決這個問題,您可以使用內嵌的ASP.NET代碼在JavaScript中禁用它。這裏有一個例子:

.aspx文件

<button id="clientButton" onclick="javascript:update();" /> 
<asp:Button ID="serverButton" OnClick="serverButton_OnClick" runat="server" /> 
<script type="text/javascript"> 
<% if (Page.IsPostBack) { %> 
document.getElementById("clientButton").enabled = false; 
<% } %> 
function update() { 
    document.getElementById("clientButton").enabled = false; 
    document.getElementById("<%= serverButton.ClientID %>").click(); 
} 
</script> 
<style type="text/css"> 
#<%= serverButton.ClientID %> { 
    visibility: hidden; 
    display: none; 
} 
</style> 



.ASPX.CS文件

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     // Triggered when serverButton has 'javascript:click()' triggered 
    } 
} 
相關問題