Foros del Web » Programando para Internet » Javascript »

No detiene los eventos con stopPropagation - Solucionado.

Estas en el tema de No detiene los eventos con stopPropagation - Solucionado. en el foro de Javascript en Foros del Web. Estuve investigando en el foro y en ninguno de los temas creados pude encontrar la solución. Yo tengo una página que tiene un iframe, dentro ...
  #1 (permalink)  
Antiguo 27/02/2010, 17:36
 
Fecha de Ingreso: agosto-2003
Mensajes: 203
Antigüedad: 21 años, 4 meses
Puntos: 0
No detiene los eventos con stopPropagation - Solucionado.

Estuve investigando en el foro y en ninguno de los temas creados pude encontrar la solución.
Yo tengo una página que tiene un iframe, dentro del mismo necesito que al intentar salir de la página con el menú superior no lo permita sin grabar primero los datos, logro tomar los eventos pero no los puedo detener.
El código js es el siguiente.
Código:
var salidaValida = 0;
window.onunload = function (elEvento)
{
	var e = elEvento || window.event;
	if (salidaValida==0)
	{
		if (e.preventDefault) 
		{
			e.cancel = true;
			e.returnValue= "Antes de salir guarde los cambios por favor";
			e.cancelBubble=true;
			e.preventDefault();
			e.stopPropagation();
			
		} 
		else 
		{
			e.returnValue = false;
			e.cancelBubble = true;
		}
//		alert("No cancelo");
		return false; 
	}	
}


function verEvento(elEvento)
{
	var evento = elEvento || window.event;
	salidaValida = 1;
}

document.onclick = verEvento;
con esto logro determinar si es un link interno o un click desde el menú, pero ni detiene los click interno (si le cambio el if) ni los externos del iframe, me muestra el alert y luego sigue ejecutando el link.

Espero que me puedan dar una idea de que puede estar pasando.
Muchas gracias

Última edición por lenz; 28/02/2010 a las 13:12 Razón: Solucionado
  #2 (permalink)  
Antiguo 27/02/2010, 23:39
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: No detiene los eventos con stopPropagation

no todos los eventos se pueden cancelar, entre ellos: abort, blur, change, error, focus, load, mousemove, reset, resize, scroll, select, unload, DOMFocusIn, DOMFocusOut. sin embargo, si lees la propiedad cancelable para el evento unload, te devuelve true significando que se puede cancelar el evento. en realidad no se puede cancelar porque la accion predeterminada se pone en marcha antes de que el listener pueda capturar el evento. quizas lo que estas buscando es onbeforeunload.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 28/02/2010, 11:42
 
Fecha de Ingreso: agosto-2003
Mensajes: 203
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: No detiene los eventos con stopPropagation

Muchas gracias por la explicación, voy a investigar lo que me indicas.
  #4 (permalink)  
Antiguo 28/02/2010, 13:11
 
Fecha de Ingreso: agosto-2003
Mensajes: 203
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: No detiene los eventos con stopPropagation

Gracias a tu mensaje pude resolverlo. Lo que necesitaba era evitar que el usuario salga del formulario a medio completar, no pude hacer que si intenta ir a otra parte del menú le consulte si desea cancelar todo, pero lo hago automáticamente.
Dejo el código final.
Muchas gracias.
Código:
var salidaValida = 0;
window.onunload = function (elEvento)
{
	var e = elEvento || window.event;
	if (salidaValida==0)
	{
		if (e.preventDefault) 
		{
			e.cancel = true;
			e.cancelBubble=true;
			e.preventDefault();
			e.stopPropagation();
			
		} 
		else 
		{
			e.returnValue = false;
			e.cancelBubble = true;
		}
		var objFrame = parent.top.window.frames[1];
		objFrame.location = "procesar.php?accion=cancelar&oculto=1";
		return false; 
	}
}


function verEvento(elEvento)
{
	var evento = elEvento || window.event;
	salidaValida = 1;
}

document.onclick = verEvento;
En mi caso como lo que quiero evitar es que se desplace por el menú que esta en la página que contiene el iframe detecto que es un evento interno con el document.onclick y si no lo es ejecuto en otro iframe oculto el cancelar.

Etiquetas: detiene, eventos, solucionado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:18.