2011-12-12 47 views
7

Tôi có sự kiện onclick sau đây cho một nút. một khi sự kiện này là ftonired tôi muốn vô hiệu hóa nút. Bất cứ ai có thể giúp tôi hiểu làm thế nào để làm điều đó?Làm thế nào để vô hiệu hóa một nút sau khi nhấp chuột đầu tiên

Đây là mã tôi thực thi trên sự kiện 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"); 
    } 
} 

Đây là Nút mà tôi muốn tắt.

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

Đặt False để sở hữu Enabled nút trong handler nhấp chuột. – adatapost

+1

bạn có thể rõ ràng khi bạn muốn nút này bị vô hiệu hóa không? Khách hàng hoặc sau khi máy chủ postback –

Trả lời

12

Các bạn đã thử ?:

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

điều này sẽ không tắt nút cho người dùng trong trình duyệt của họ, họ vẫn có thể nhấp vào nút nhiều lần không bị giới hạn. – JDPeckham

2

Xem đánh dấu đang

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

nếu bạn muốn làm điều đó bằng cách sử dụng jquery hơn

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

Đây có phải là $ ('# button3'). Attr ("disabled", "disabled") không? Tôi nghĩ rằng nó sẽ làm việc trong firefox nhưng không phải là IE ... – Dave

+0

@Dave: - điều này sẽ làm việc trong tất cả các trình duyệt –

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

Sử dụng các thuộc tính OnClientClick và UseSubmitBehavior của điều khiển nút.

<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 cho phép bạn thêm phía máy khách. Trong trường hợp này, JavaScript sẽ tắt phần tử nút và thay đổi giá trị văn bản của nó thành thông báo tiến trình. Khi postback hoàn tất, trang vừa được hoàn trả sẽ hoàn nguyên nút trở về trạng thái ban đầu của nó mà không cần thêm bất kỳ công việc nào.

Một điều đáng tiếc là việc vô hiệu hóa nút gửi ở phía máy khách là nó sẽ hủy gửi của trình duyệt và do đó đăng lại. Việc đặt thuộc tính UseSubmitBehavior thành false sẽ cho .NET biết rằng hãy tiêm tập lệnh khách hàng cần thiết để kích hoạt postback, thay vì dựa vào hành vi gửi biểu mẫu của trình duyệt. Trong trường hợp này, mã nó tiêm sẽ là:

__doPostBack('BtnSubmit','') 

Redered HTML:

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

này sẽ cung cấp cho bạn những hành vi mong muốn.

Từ: http://encosia.com/disable-a-button-control-during-postback/ Credit: Dave Ward (Twitter: @Encosia)

+0

điều này sẽ là câu trả lời tốt nhất kể từ khi nút sẽ trở lại để được kích hoạt sau khi bài trở lại –

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; 
     } 
    } 

gọi OnClientClick này nút

5

của Bạn sẽ cần phải thiết lập thuộc tính của nút Enabled ở phía máy chủ mã được chi tiết bởi các áp phích khác. Tuy nhiên, nếu bạn đang cố ngăn chặn nhiều lần gửi từ cùng một nút, bạn sẽ cần một chút khác biệt.

Thêm một phương pháp để lớp học của bạn:

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()); 

} 

Trong Page_Load thêm

DisableButtonDuringPostback(this.Page, Button3); 
0

Đây là một bài cũ, tuy nhiên tôi không nghĩ rằng nó được trả lời đầy đủ.

Thứ nhất, trong ASP.NET WebForms, bạn gửi yêu cầu HTTP GET tới máy chủ web xử lý yêu cầu của bạn và xuất ra mã HTML phía máy khách để trình duyệt hiển thị.

Vì bạn đang tương tác với điều khiển phía máy chủ, các giá trị được chứa trong trường nhập VIEWSTATE ẩn cho các thuộc tính (chẳng hạn như boolean cho Enabled).

Khi bạn nhấp vào một nút, nó sẽ gửi yêu cầu HTTP POST tới máy chủ web trên cùng một trang. Đây là lý do tại sao sự kiện Page_Load được kích hoạt khi bạn nhấp vào nút.

Khi yêu cầu HTTP POST đã được xử lý, sau đó nó sẽ trả về mã HTML để trình duyệt hiển thị lại. Vì lý do này, nếu bạn có đoạn mã sau vào sự kiện Page_Load của bạn:

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

Nó sẽ không hiển thị cho người dùng biết nó bị vô hiệu hoá cho đến khi yêu cầu HTTP POST đã được xử lý và trả lại mã client-side được cập nhật.

Từ câu hỏi ban đầu, có vẻ như máy chủ đã mất vài giây để trả về một phản hồi, do đó nhiều sự kiện postback có thể được kích hoạt khi nhấp vào nút lặp đi lặp lại.

Cách đơn giản (nhưng gây phiền nhiễu) để giải quyết vấn đề của bạn là phải thực hiện một HTML thường xuyên button thi hành một function trong JavaScript để vô hiệu hóa và kích hoạt sự kiện onclick của điều khiển phía máy chủ. Vấn đề với điều này sau đó sẽ là khi yêu cầu HTTP POST trả về một phản hồi, nó sẽ hiển thị HTML thông thường button khi được bật. Để giải quyết vấn đề này, bạn có thể vô hiệu hóa nó bằng JavaScript bằng mã ASP.NET trong dòng. Dưới đây là một ví dụ:

aspx file

<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 tập

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) 
    { 
     // Triggered when serverButton has 'javascript:click()' triggered 
    } 
} 
Các vấn đề liên quan