lunes, 27 de diciembre de 2010

Evitar doble Click en un botón de Ajax.

Pesadilla de medianoche. Una aplicación en Ajax que funciona perfectamente, de repente empieza a duplicar registros. Y esto es motivado porque los usuarios le han cojido el tranquillo  a la pantalla de alta y cuando llegan al botón de “Guardar”, pulsan como animales (cuatro o cinco veces por segundo).

Teniendo cuidadín de no romper el sistema de ventanas de alerta, y buscando en San Google, he llegado al blog The Disturbed Budda en donde está la siguiente solución que es elegante y limpia.

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" EnablePageMethods="true" EnablePartialRendering="true"
runat="server">
</
asp:ToolkitScriptManager>

<
script type="text/javascript">
var
pbControl = null;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler);
prm.add_endRequest(EndRequestHandler);
function BeginRequestHandler(sender, args) {
pbControl = args.get_postBackElement(); //the control causing the postback
pbControl.disabled = true;
}
function EndRequestHandler(sender, args) {
pbControl.disabled = false;
pbControl = null;
}
</script>


Este script, que captura todos los eventos de postback asíncronos e inhabilita el control emisor hasta que haya una respuesta, hay que situarlo entre el scriptmanager y el updatepanel. En este caso particular entre el  ToolkitScriptManager  y el ContenPlacer de la MasterPage.



De todas formas debería hacerle una refactorización para usarlo solamente en los controles del tipo button y ver si puedo hacerlo en JQuery.



Seguro que es útil,

No hay comentarios: