Al igual que cualquier otro desarrollador web en el planeta, tengo un problema con los usuarios al hacer doble clic en el botón Enviar en mis formularios. Según entiendo, la forma convencional de manejar este problema es desactivar el botón inmediatamente después del primer clic; sin embargo, cuando lo hago, no se publica.¿Por qué mi formulario no se publica cuando desactivo el botón de enviar para evitar hacer doble clic?
Hice algunas investigaciones sobre esto, Dios sabe que hay suficiente información, pero otras preguntas como Disable button on form submission, deshabilitar el botón parece funcionar. El póster original de Disable button after submit parece haber tenido el mismo problema que yo, pero no se menciona cómo/si lo resolvió.
Aquí hay algo de código en la forma en que lo repita (probado en IE8 Beta 2, pero tuvo el mismo problema en IE7)
Mi código aspx código
<%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<script language="javascript" type="text/javascript">
function btn_onClick()
{
var chk = document.getElementById("chk");
if(chk.checked)
{
var btn = document.getElementById("btn");
btn.disabled = true;
}
}
</script>
<body>
<form id="form1" runat="server">
<asp:Literal ID="lit" Text="--:--:--" runat="server" />
<br />
<asp:Button ID="btn" Text="Submit" runat="server" />
<br />
<input type="checkbox" id="chk" />Disable button on first click
</form>
</body>
</html>
Mi cs
using System;
public partial class _Default : System.Web.UI.Page
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
btn.Click += new EventHandler(btn_Click);
btn.OnClientClick = "btn_onClick();";
}
void btn_Click(object sender, EventArgs e)
{
lit.Text = DateTime.Now.ToString("HH:mm:ss");
}
}
Aviso que cuando haces clic en el botón, se produce una devolución de datos y se actualiza la hora. Pero cuando marca la casilla de verificación, la próxima vez que haga clic en el botón, el botón se desactivará (como se esperaba), pero nunca lo hará.
¿QUÉ HECK ME FALTA AQUÍ?
Gracias de antemano.
Gracias, esto funciona. Pero cuando UseSubmitBehaviour desactiva la publicación del formulario del navegador predeterminado y utiliza la publicación del formulario ASP.NET, estoy algo nervioso acerca de una técnica específica de MS en lugar de la forma convencional de hacer las cosas. ¿Sabes si hay alguna repercusión al usar esto? THX otra vez –
ninguno que he visto. Me alegro de ayudar – Echostorm
Esto ha funcionado perfectamente en mis soluciones. Gracias Echostorm. – jwalkerjr