2010-09-09 12 views
11

Deseo desactivar todos los elementos de la página sobre una acción. Como la modal que se encuentra en la interfaz de usuario de JQuery.desactivar todos los elementos de la página con la función modal utilizando jQuery

Al igual que en una acción ajax .. deseo de mostrar una notificación y al mismo tiempo se activará la función modal. Y después de la solicitud, necesita volver a habilitar los elementos de la página.

¿Hay alguna opción disponible en jQuery la base de ese o cualquier plugins?

+2

usted debe considerar si lo que realmente es su comportamiento deseado. Hacer eso se acercaría a establecer la solicitud de ajax a sincronizada, lo que termina en una experiencia de usuario bastante mala. – jAndy

+1

UI de bloque http://malsup.com/jquery/block/ –

Respuesta

22

Los elementos de la página no están deshabilitados, lo que sería bastante tedioso, pero más bien, se superpone un div semitransparente sobre todos los demás elementos de la página. Para ello, es probable que hacer algo como

// Declare this variable in the same scope as the ajax complete function 
overlay = $('<div></div>').prependTo('body').attr('id', 'overlay'); 

Y el CSS:

#overlay { 
    position: fixed; 
    height: 100%; 
    width: 100%; 
    z-index: 1000000; 
    background: url('link/to/semitransparent.png'); 
} 

A continuación, una vez que la acción se ha completado, sólo tiene que quitar de esta manera:

overlay.remove(); 

n necesita incluir jQuery UI si esto es lo único que necesita.

+5

Esto realmente no funciona como se esperaba si presiona TAB. Mantenga presionada la pestaña y, finalmente, los enlaces, cuadros de texto y otros elementos de la interfaz de usuario "debajo" del modal se puede acceder. – peter

+0

@PeterCPWong Depende de qué tan mal desee deshabilitar la UI. Siempre se puede dibujar un bucle y realmente desactivar todos los elementos de página, o 'ocultar()' todos los elementos debajo del diálogo modal, pero diré que deshabilitar el botón 'tab' (como lo que hace la UI de Bloque) es malo para la accesibilidad - que sería atrapando los usuarios de teclado en su página sin medios de tabulación al navegador de interfaz de usuario –

+0

Creo que la mejor manera es desactivar TAB para los elementos de interfaz de usuario "congelados" y permitir que los usuarios pulsen la tecla ESC para cerrar el modal y "descongelar "la interfaz de usuario. Considere un formulario modal donde el usuario usa TAB para avanzar a través del formulario. Si aún se puede acceder a la IU "congelada" a través de TAB, realmente se rompe la usabilidad de tu aplicación web. – peter

7

Una manera fácil de lograr esto es definir una clase css de esta manera:

.dark-class 
{ 
    background-color: #F0F0F0; 
    filter:alpha(opacity=50); /* IE */ 
    opacity: 0.5; /* Safari, Opera */ 
    -moz-opacity:0.50; /* FireFox */ 
    z-index: 20; 
    background-repeat:no-repeat; 
    background-position:center; 
    width: 100%; 
    height: 100%; 
    position:absolute; 
    top: 0px; 
    left: 0px; 
} 

Uso jQuery para agregar esta clase a un div vacío que es el primer hijo del elemento de cuerpo. Elimina la clase para deshabilitar el modo modal.

Su notificación debe tener un índice z mayor que el índice z de la clase oscura. Todos los artículos que necesitan ser deshabilitados deben tener un índice Z más bajo.

6

me gusta la idea de Jiang pero usted no necesita una imagen con la siguiente hoja de estilo de superposición.

#overlay { 
    position: fixed; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 100%; 
    background: #000; 
    opacity: 0.8; 
    filter: alpha(opacity=80); 
    z-index:50; 
} 
Cuestiones relacionadas