JavaScript - Evita que form reciba foco (Popup modad)

   
Vista:

Evita que form reciba foco (Popup modad)

Publicado por Eduardo (3 intervenciones) el 19/11/2012 00:12:42
Buenas. Tengo un div que hace de Popup. En un momento determinado muestra un mensaje y tiene un botón para cerrarse. Para hacer que sea modal, primero visualizo un div vacío con con un color tenue que cubre la totalidad del formulario y sobre éste muestro el popup. La visualización la hago a través de la propiedad display de css, con JQuery:
1
2
3
4
5
$("#btnMostrarPopup").click(function () {
	$("#divP").css("display", "block");	// Este es el div tenue que cubre todo el form
	$("#PopupWarning").css("display", "block");	// Este es el popup que contiene los datos (es un div)
	$("#btnCerrarWarning").focus();	// Tiene un botón para cerrarse (ocultarse)
});


El problema que tengo es que no consigo al 100% que sea modal. Al visualizarse el popup y pulsar la tecla Tab, se podía pasar dentro del formulario y escribir en él. Lo que se me ocurrió, fue utilizar un evento key para detectar la tecla Tab y hacer que no haga efecto mientras el popup está visible. Esto es lo que hice:
1
2
3
4
5
$("#form1").keydown(function (e) {
	var display = $("#PopupWarning").css("display");
	var key = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
	if (display == "block" && key == 9) return false;
});


Lo cual funciona bien en IE pero en todos los demás como Chrome, Mozilla, Opera y Safari si hago click sobre cualquier otra parte que no sea el popup y pulso Tab, se logra introducir el foco en un control del Form y escribir en él. O también si ubico el cursor sobre la barra de dirección y pulso Tab.

Quisiera me ayudaran a hacer modal el popup o quizás orientarme con otra forma.

Saludos cordiales.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

Evita que form reciba foco (Popup modad)

Publicado por xve (1595 intervenciones) el 19/11/2012 07:42:19
Hola Eduardo, prueba así:

1
if ((display == "block" || display == "inline") && key == 9) return false;


Algunas veces, al cambiar el display a block no lo pone en block sino en inline...
De todas maneras, yo te recomiendo que utilices la instrucción .is de jquery... algo así:

1
if ($("#PopupWarning").is(":visible") && key == 9) return false;


Para saber si esta escondido, cambia visible por hidden
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Evita que form reciba foco (Popup modad)

Publicado por Eduardo (3 intervenciones) el 20/11/2012 04:39:29
Gracias por tu respuesta xve, pero sigue exactamente con el mismo comportamiento, probé con las 2 formas que me indicaste pero aún es posible introducir el foco en un control.
Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Evita que form reciba foco (Popup modad)

Publicado por xve (1595 intervenciones) el 20/11/2012 07:45:25
Hola Eduardo, puedes hacer un
1
alert(display+" - "+key)

haber que valores te devuelve??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Evita que form reciba foco (Popup modad)

Publicado por Eduardo (3 intervenciones) el 24/11/2012 15:18:49
Me devuelve correctamente true - 9 cuando el popup está visible y false - 9 cuando no lo está. Pero me acabo de dar cuenta que el problema ocurre con la primera pulsación del tab en el navegador. Si pulso tab con el popup oculto, el alert nisiquiera se muestra y la primera caja recibe el foco y a partír de ahí recién empiezan a mostrarse los alert con cada pulsación.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar