asp.net - how - aspx onclick javascript function
Evitar el doble clic accidental en un botón (7)
Tengo algunos controles que heredan de los botones de ASP.NET y usan ''onserverclick''.
Si el usuario hace clic dos veces, el botón dispara dos eventos del lado del servidor. ¿Cómo puedo prevenir esto?
Intenté configurar "this.disabled = ''true''" después del clic (en el atributo ''onclick'') a través de javascript, pero eso bloquea también la primera devolución de datos.
Alguien más dijo esto en algún lugar aquí hace unos días, y estoy de acuerdo: usa JavaScript para simplemente ocultar el botón en lugar de desactivarlo; podría mostrar una imagen "giratoria" en su lugar, lo que le permite saber lo que está sucediendo.
En lugar de esconderme, lo que hice fue intercambiar botones usando javascript. Muestre otra imagen en gris con el clic del primer botón.
No necesariamente quiere mostrar el botón deshabilitado en la devolución de datos. Desea asegurarse de que no se envíen accidentalmente dos veces. Así que deshabilitar u ocultar el botón como resultado de una acción en el servidor ya es demasiado tarde en el juego. En este punto, la segunda solicitud ya está en camino. Debe hacerlo con javascript o asegurarse de que el código del servidor no se ejecute dos veces.
Vea este ejemplo para deshabilitar el control en la devolución de datos. Debería ayudarlo a hacer lo que está tratando de lograr.
http://encosia.com/2007/04/17/disable-a-button-control-during-postback/
En el caso de un panel de actualización y un botón dentro de una plantilla FormView, uso el siguiente enfoque:
<script type="text/javascript">
// Using that prm reference, hook _initializeRequest
Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequestBuchung);
// Abfangen von Mehrfachklicks auf Buttons für asynchrone Postbacks im Updatepanel
function InitializeRequestBuchung(sender, args) {
var arrButtonIds = ["ButtonInsert", "ButtonUpdate"];
// Get a reference to the PageRequestManager.
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (prm.get_isInAsyncPostBack() & jQuery.inArray(args.get_postBackElement().id, arrButtonIds) > -1) {
args.set_cancel(true);
}
}
</script>
Esto cancela la siguiente devolución de datos si actualmente una devolución de datos asíncrona aún está activa. Funciona perfectamente.
Establezca la propiedad Button UseSubmitBehavior en false. Luego crea una función OnClientClick que deshabilita el botón. Se vería algo como esto:
<script type="text/javascript">
function disableFunctn(button){
button.disabled = true;
}
</script>
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="disableFunctn(this);"/>
la forma más rápida y barata:
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="this.disabled=true;"/>
También puedes probar, por ejemplo, btnSave.Enable = false; cuando se pulsa el botón y antes de que el procesamiento del botón se realice en la rutina Click Event. Si necesita que se restablezca para permitir que esté habilitado, tenga un botón separado que restablezca el botón para volver a utilizarlo.
Otro método es configurar el botón con verificación para que se le pregunte al usuario si desea guardar, debería aparecer ambas veces.
Otro método más sería marcar la primera aparición y luego establecer una ventana emergente para el segundo para verificar un segundo uso o posterior.