2010-10-29 29 views
8

Entiendo cómo usar javascript para cambiar el cursor a ocupado mientras la página está haciendo una llamada ajax.cambiar el cursor a ocupado mientras se carga la página

Sin embargo, tengo una página que no usa ajax, usa una devolución de datos para volver a cargar la página. Sin embargo, la carga es bastante intensiva en datos y lleva unos segundos. Durante este tiempo, el usuario aún puede hacer clic en la página. Quiero poner el cursor en "espera" para que el usuario no intente hacer clic en la página.

Por ejemplo, tengo un par de listas desplegables que causan la devolución de datos. Realizo una selección y la página se carga durante 3 segundos. Mientras se carga, me gustaría que el cursor pase a esperar para que el usuario no intente hacer una selección en un segundo menú desplegable hasta que la página se vuelva a cargar.

¿Esto es posible?

Información adicional: (versión simplificada de mi configuración)

Tengo un masterpage:

<form id="form1" runat="server"> 
<table width = "100%" bgcolor="White"> 
<tr><td> 
<h3><asp:ContentPlaceHolder id="MAIN" runat="server"></asp:ContentPlaceHolder></h3> 
</tr></td> 
</table> 
</form> 
<script type="text/javascript"> 
    function cursorwait(e) { 
     document.body.style.cursor = 'wait'; 
    } 

    var fm = document.getElementById('<% =form1.ClientID %>'); 
    if (fm.addEventListener) { 
     fm.addEventListener('submit', cursorwait, false); 
    } 
    else { 
     fm.attachEvent('onsubmit', cursorwait); 
    } 
</script> 

y luego una página que utiliza la página maestra:

<asp:Content ID="Content1" ContentPlaceHolderID="MAIN" Runat="Server"> 
<table runat=server id="tb_simple_search_table" cellpadding = 0 cellspacing = 0> 
<tr><td> 
    <asp:DropDownList... 
    <asp:DropDownList... 
</td></tr> 
</table> 
</asp:content> 
+0

Son esos DropDownLists que están haciendo las devoluciones de datos durante el cual desea que el cursor de espera. – kralco626

+0

Quiero decir realmente, cada vez que la página se carga sería bueno si pudiera obtener el cursor de espera, independientemente de si está esperando ... – kralco626

Respuesta

5

puede agregar un controlador al formulario submit evento.

CSS

.wait, .wait * { cursor: wait; } 

JavaScript

function cursorwait(e) { 
    document.body.className = 'wait'; 
} 

var fm = document.getElementById('<% =form1.ClientID %>'); 
var proxySubmit = fm.onsubmit; 

fm.onsubmit = function() { 
    cursorwait(); 
    if (proxySubmit) { 
     proxySubmit.call(fm); 
    } 
} 

aquí estamos asegurando nuestro método se llama a si submit() se llama js en el menú desplegable como lo hace cuando se produce una devolución de datos. esto también debería detectar cualquier otra instancia del envío del formulario.

+0

Me gusta esta idea. Coloqué el script en mi página maestra. Sin embargo, recibí un error cuando la línea: fm.addEventListener decía que se esperaba un objeto. Tengo un formulario llamado form1 en mi página maestra pero no en mis páginas secundarias. ¿Cómo solucionaría eso? – kralco626

+0

Intenté usar var fm = $ ('# form1'); pero recibí un error en la línea fm.attachEvent ('onsubmit', cursorwait); diciendo que este opbject no es compatible con esto. – kralco626

+0

¿está colocando el guión después del formulario en la página? use el nombre de cualquier forma que contenga los controles que le interesen. '$ ('# form1')' obtiene un objeto jquery, no un elemento dom. – lincolnk

5

no soy seguro si este es el mejor método o el más eficiente, pero si desea cambiar el cursor para mostrar que la página está ocupada después de hacer clic en el botón, jQuery debe hacer el truco:

$(document).ready(function() { 
    $(".button").click(function() { 
     $("*").css("cursor", "wait"); 
    }); 
}); 
+0

gran solución, lamentablemente, simplemente no para el problema que tengo. No solo tengo un botón que podría causar la devolución de datos, tengo varios objetos y muchos eventos. Definitivamente voy a tener esto en cuenta para cuando estoy usando JQuery. – kralco626

1

acaba de dar cada botón de una clase, por ejemplo "WaitOnClick", a continuación, sólo escribirlo: $(".WaitOnClick").click(function() {

Cuestiones relacionadas