Tengo una aplicación asp.net que quiero deshabilitar los botones tan pronto como se hacen clic para evitar múltiples envíos. Me gustaría usar jquery para esto, ya que el sitio ya lo usa liberalmente de todos modos.Desactivar botones en la publicación posterior usando jquery en la aplicación .net
Lo que he intentado es:
$(document).ready(function() {
$("#aspnetForm").submit(function() {
$('input[type=submit]', $(this)).attr("disabled", "disabled");
})
});
Lo anterior se desactivará el botón, y la página sostiene, pero el botón de asp.net controlador de clic no se llama. Simplemente eliminar lo anterior y los botones funcionan normalmente.
¿Hay una manera mejor? O, mejor dicho, ¿qué estoy haciendo mal?
ACTUALIZACIÓN Bien, finalmente tuve un poco de tiempo para juntar una página muy simple.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SubTest.aspx.cs" Inherits="MyTesting.SubTest" %>
<!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">
<head runat="server">
<title></title>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$("#form1").submit(function() {
$('input[type=submit]', $(this)).attr("disabled", "disabled");
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
<asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Button 2" />
</div>
</form>
</body>
</html>
El código se ve atrás como:
using System;
namespace MyTesting {
public partial class SubTest : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
if (IsPostBack) {
// this will execute when any button is pressed
Response.Write("postback");
}
}
protected void Button1_Click(object sender, EventArgs e) {
// never executes
System.Threading.Thread.Sleep(1000);
Response.Write("Button 1 clicked<br />");
} // method::Button1_Click
protected void Button2_Click(object sender, EventArgs e) {
// never executes
System.Threading.Thread.Sleep(1000);
Response.Write("Button 2 clicked<br />");
} // method::Button2_Click
}
}
Al hacer clic en un botón que, obviamente, desactiva los botones, pero ninguno de los clics de los botones se ejecutan.
HTML representado
<!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">
<head><title>
</title>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$("#form1").submit(function() {
$('input[type=submit]', $(this)).attr("disabled", "disabled");
});
});
</script>
</head>
<body>
<form name="form1" method="post" action="SubTest.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTcxODU4OTc0MWRkParC5rVFUblFs8AkhNMEtFAWlU4=" />
</div>
<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwKB57WhCAKM54rGBgK7q7GGCC6LlWKFoij9FIBVuI0HOVju/fTy" />
</div>
<div>
<input type="submit" name="Button1" value="Button" id="Button1" />
<input type="submit" name="Button2" value="Button 2" id="Button2" />
</div>
</form>
</body>
</html>
muy interesante Gotchya –
creo que sé exactamente lo que está pasando ahora. Debido a que el atributo de botón está desactivado, el motor de asp.net dice "¡oh, el botón está deshabilitado, no ejecute su código posterior de publicación!" Sin embargo, como se envió un envío, sigue adelante y realiza una publicación normal de nuevo ... grr – NotMe