2011-03-04 43 views
31

Tengo un botón ASP.NET que necesito deshabilitar después de que el usuario hace clic para evitar hacer doble clic. Una vez que se completa el envío, debe habilitarse de nuevo. Puede alguien ayudarme con esto?Deshabilitar el botón asp.net después de hacer clic para evitar hacer doble clic

+0

Es muy sencillo button.enable = false después de la finalización de código deseada – Dotnet

+0

¿Es esto una devolución de datos normal o AJAX? –

+0

Consulte mi respuesta para otra pregunta si no desea corregir esto botón a botón: http://stackoverflow.com/a/28844217/787757 – sparebytes

Respuesta

0

Puede hacerlo con javascript. en su etiqueta form, onsubmit="javascript:this.getElementById("submitButton").disabled='true';"

2

Desactive el botón en el evento OnClick y vuelva a habilitarlo en el controlador de eventos de devolución de llamada AJAX. Así es como lo hago con jQuery.

<script> 
$(document).ready(function() { 

    $('#buttonId').click(function() { 
     $(this).attr('disabled', 'disabled'); 
     callAjax(); 
    }); 

}); 

function callAjax() 
{ 
    $.ajax({ 
     url: 'ajax/test.html', 
     success: function(data) { 
     //enable button 
     $('#buttonId').removeAttr('disabled'); 

     } 
    }); 
} 
</script> 
3

Se puede utilizar el lado del cliente onclick caso de hacerlo:

yourButton.Attributes.Add("onclick", "this.disabled=true;"); 
29

he encontrado this, y funciona:

btnSave.Attributes.Add(
    "onclick", 
    "this.disabled = true;" + ClientScript.GetPostBackEventReference(btnSave, null) + ";"); 
+2

¿Qué es clientScript? –

-2

ninguna de las soluciones anteriores funciona para yo y finalmente encontré la manera más fácil de hacerlo.

button1.enabled = false 

cuando necesita activar simplemente hágalo.

button1.enabled = true 
+6

¿Cómo evita esto hacer doble clic? Solo se deshabilitará una vez que la solicitud haya finalizado, durante la cual se podría hacer clic en un grupo. – guanome

1

usando jQuery:

$('form').submit(function(){ 
    $(':submit', this).click(function() { 
     return false; 
    }); 
}); 
10

Comprobar este enlace, la forma más sencilla y no se deshabilita las validaciones.

http://aspsnippets.com/Articles/Disable-Button-before-Page-PostBack-in-ASP.Net.aspx

Si usted tiene, por ejemplo,

<form id="form1" runat="server"> 
     <asp:Button ID="Button1" runat="server" Text="Button1" OnClick="Button1_Clicked" /> 
    </form> 

continuación, puede utilizar

<script type = "text/javascript"> 
    function DisableButton() { 
     document.getElementById("<%=Button1.ClientID %>").disabled = true; 
    } 
    window.onbeforeunload = DisableButton; 
    </script> 

Para desactivar el botón si y después de la validación ha tenido éxito, al igual que la página está haciendo una devolución de datos del servidor.

+0

Las respuestas de enlace único no son bienvenidas en Stack Overflow. – hims056

0

Esto funciona con un botón html regular.

<input id="Button1" 
    onclick="this.disabled='true';" type="button" 
    value="Submit" name="Button1" 
    runat="server" onserverclick="Button1_Click"> 

El botón está deshabilitado hasta que se complete la devolución de datos, evitando hacer doble clic.

21

Aquí hay una solución que funciona para el objeto del botón asp.net. En la parte delantera, agregar estos atributos a su asp: Button definición:

<asp:Button ... OnClientClick="this.disabled=true;" UseSubmitBehavior="false" /> 

En la parte final, en el evento Click llamado método de control, agregar este código al final (preferiblemente en un bloque finally)

myButton.Enabled = true; 
+3

no funciona :( –

1

Me gusta desactivar el botón y llamar a una devolución de datos, de esta manera el código detrás aún se ejecuta después de que el botón esté deshabilitado.

Éste es cómo adjunto de código detrás:

btnProcess.Attributes.Add("onclick", " this.disabled = true; __doPostBack('btnProcess', ''); return false;") 

que volver a activar el botón de código subyacente:

btnProcess.Enabled = True 
1

probar esto, que trabajó para mí

<asp:Button ID="button" runat="server" CssClass="normalButton" 
Text="Button" OnClick="Button_Click" ClientIDMode="Static" 
OnClientClick="this.disabled = true; setTimeout('enableButton()', 1500);" 
UseSubmitBehavior="False"/> 

Luego

<script type="text/javascript"> 
function enableButton() { 
document.getElementById('button').disabled = false; 
} 
</script> 

Se puede ajustar el tiempo de retardo en "setTimeout"

0
<script type = "text/javascript"> 
function DisableButtons() { 
    var inputs = document.getElementsByTagName("INPUT"); 
    for (var i in inputs) { 
     if (inputs[i].type == "button" || inputs[i].type == "submit") { 
      inputs[i].disabled = true; 
     } 
    } 
} 
window.onbeforeunload = DisableButtons; 
</script> 
3
<asp:Button ID="btnSend" runat="server" Text="Submit" OnClick="Button_Click"/> 

 <script type = "text/javascript"> 
      function DisableButton() 
      { 
       document.getElementById("<%=btnSend.ClientID %>").disabled = true; 
      } 
      window.onbeforeunload = DisableButton; 
     </script> 
4

Si desea evitar un doble clic, debido a un código del lado del servidor en respuesta lenta a continuación, esto funciona bien:

<asp:Button ... OnClientClick="this.disabled=true;" UseSubmitBehavior="false" /> 

Intenta poner un Threading.Thread.Sleep (5000) en el _Click() evento en el servidor y verá que el botón está deshabilitado por el tiempo que el servidor está procesando el evento de clic.

¡No es necesario que el código del lado del servidor vuelva a habilitar el botón tampoco!

+0

Funcionó perfectamente para lo que necesitaba lograr. También puede agregar 'this.style.backgroundcolor = '#abcdef';' para cambiar los aspectos de estilo del elemento. –

+0

Esto funciona perfectamente. Solo quiero enfatice la necesidad de 'UseSubmitBehavior =" false "', sin eso, el clic de su botón no se activará en código subyacente. –

0

Si a alguien le importa, he encontrado esta publicación inicialmente, pero utilizo la compilación de ASP.NET en Validación en la página. Las soluciones funcionan, pero deshabilite el botón aunque haya sido validado. Puede usar este código siguiente para hacerlo de modo que solo deshabilite el botón si pasa la validación de página.

<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Submit" OnClientClick=" if (Page_ClientValidate()) { this.value='Submitting..'; this.disabled=true; }" UseSubmitBehavior="false" /> 
0

Esta solución funciona si está utilizando los validadores ASP.NET:

<script language="javascript" type="text/javascript"> 
function disableButton(sender,group) 
{ 
    Page_ClientValidate(group); 
    if (Page_IsValid) 
    { 
     sender.disabled = "disabled"; 
     __doPostBack(sender.name, ''); 
    } 
}</script> 

y cambiar el botón:

<asp:Button runat="server" ID="btnSendMessage" Text="Send" OnClick="btnSendMessage_OnClick" OnClientClick="disableButton(this,'theValidationGroup')" CausesValidation="true" ValidationGroup="theValidationGroup" /> 
Cuestiones relacionadas