2011-12-12 16 views
7

Mam następujące zdarzenie onclick dla przycisku. po zakończeniu tego zdarzenia chcę wyłączyć przycisk. Czy ktoś może mi pomóc zrozumieć, jak to zrobić?Jak wyłączyć przycisk po pierwszym kliknięciu

Oto kod i wykonać na zdarzenie clickclick.

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

Tutaj znajduje się przycisk, który chcę, aby wyłączyć.

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

Ustaw Fałsz Włączone właściwości przycisku w click obsługi. – adatapost

+1

możesz być pewien, kiedy ten przycisk ma być wyłączony? Klient lub po odświeżeniu serwera –

Odpowiedz

12

Have you tried ?:

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

to nie wyłączałoby przycisku dla użytkownika w przeglądarce, nadal mogliby kliknąć przycisk wielokrotnie nieskrępowany. – JDPeckham

2

See marked code

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

if you want do do it by using jquery than

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

Nie powinno to być $ ("# button3"). Attr ("wyłączone", "wyłączone")? Myślę, że będzie działał w firefoxie, ale nie IE ... – Dave

+0

@Dave: - to będzie działać we wszystkich przeglądarkach –

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

Użyj właściwości OnClientClick i UseSubmitBehavior kontrolki przycisku.

<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 pozwala na dodanie skryptu OnClick po stronie klienta. W tym przypadku JavaScript wyłączy element przycisku i zmieni jego wartość tekstową na komunikat o postępie. Po zakończeniu ogłaszania zwrotnego nowo renderowana strona przywróci pierwotny stan przycisku bez dodatkowej pracy.

Jedną pułapką, która przychodzi po wyłączeniu przycisku przesyłania po stronie klienta, jest anulowanie przesyłania przeglądarki, a tym samym odświeżenie strony. Ustawienie właściwości UseSubmitBehavior na false informuje system .NET, aby wstrzyknął niezbędny skrypt klienta, aby zrezygnować z funkcji odświeżania, zamiast polegać na zachowaniu przesyłania formularza przeglądarki. W tym przypadku kod wstrzykuje byłoby:

__doPostBack('BtnSubmit','') 

Redered HTML:

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

To powinno dać pożądanego zachowania.

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

+0

to powinna być najlepsza odpowiedź, ponieważ przycisk powróci do włączenia po powrocie –

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

nazywają to OnClientClick przycisku

5

Musisz ustawić Enabled właściwość przycisku na stronie serwera kod określony przez inne plakaty. Jeśli jednak starasz się zapobiec wielokrotnym przesyłkom z tego samego przycisku, będziesz potrzebować nieco innej zasady.

Dodaj metodę klasy:

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

} 

W Page_Load dodać

DisableButtonDuringPostback(this.Page, Button3); 
0

Jest to stary post, ale nie sądzę, że został w pełni odpowiadał.

Po pierwsze, w ASP.NET WebForms, przesyła się żądanie do serwera WWW, który obsługuje twoje żądanie i wyświetla kod HTML po stronie klienta, aby przeglądarka wyrenderowała.
Podczas interakcji ze sterowaniem po stronie serwera wartości są zawarte w ukrytym polu wejściowym dla właściwości (np. Boolean dla Enabled).
Po kliknięciu przycisku wysyła on żądanie HTTP POST do serwera WWW na tej samej stronie. Dlatego zdarzenie Page_Load jest uruchamiane po kliknięciu przycisku.

Po rozpatrzeniu żądania HTTP POST, zwróci kod HTML przeglądarki do ponownego wyświetlenia. Z tego powodu, jeśli masz następujący kod w swoim przypadku Page_Load:

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

To nie będą wyświetlane użytkownikowi, że to było wyłączone, dopóki żądanie HTTP POST został traktowane i wrócił zaktualizowany kod po stronie klienta.
Od pierwszego pytania wydawało się, że serwer potrzebuje kilku sekund na zwrócenie odpowiedzi, a zatem wielokrotne ogłaszanie zwrotne może zostać uruchomione po ponownym kliknięciu przycisku.

Prosty (ale denerwujący) sposób na rozwiązanie problemu polegałby na tym, że zwykły kod HTML button w języku JavaScript byłby wykonywany w języku JavaScript, co powodowało jego wyłączenie i wywoływanie zdarzenia onclick kontrolki po stronie serwera. Problem polegałby na tym, że gdy żądanie HTTP POST zwróci odpowiedź, renderowałoby to zwykły kod HTML button jako włączony. Aby rozwiązać ten problem, możesz po prostu wyłączyć go w JavaScript przy użyciu wbudowanego kodu ASP.NET. Oto przykład:

.aspx pliku

<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 File

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