Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] disasociar manejador evento ie8

Estas en el tema de disasociar manejador evento ie8 en el foro de Javascript en Foros del Web. el caso es que no soy capaz de eliminar el evento asociado. si prueban el código en cualquier navegador (excepto ie8), alertará Cita: en el ...
  #1 (permalink)  
Antiguo 23/05/2013, 07:27
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
disasociar manejador evento ie8

el caso es que no soy capaz de eliminar el evento asociado. si prueban el código en cualquier navegador (excepto ie8), alertará

Cita:
en el primer click ---> 0
en el segundo ---> 1
en el tercer ----> 2
en el cuarto ---> 3
........
pero si lo prueban en ie8

Cita:
en el primer click ---> 0
en el segundo ----> 1
en el tercer ----> 2 y después 3
en el cuarto ----> 4, 5, 6 y 7
...........
aclaro que la función encargada de procesar el evento, ha de estar asociada a la variable

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script type="text/javascript">

var lib = {

Evento : function(elemento, nomevento, fnc) {

	if (elemento.addEventListener) {

		elemento.addEventListener(nomevento, fnc, false);

    	} else if (elemento.attachEvent) {

		elemento.attachEvent('on' + nomevento, function() { fnc.call(elemento, window.event);});

  	}
},



EventoEliminar : function(elemento, nomevento, fnc) {


	if (elemento.removeEventListener) {

		elemento.removeEventListener(nomevento, fnc, false);

    	} else if (elemento.detachEvent) {

		elemento.detachEvent('on' + nomevento, function() { fnc.call(elemento, window.event);});

  	}

},


obtenerEvento : function(event) {

	return (event) ? event : window.event;
}

};



var i = 0, n;

function f() {
lib.Evento(document.querySelector('.liga'), 'click', n = function(event) {foo(event, i)});
}




function foo(e, ii) {

var evt = lib.obtenerEvento(e);

	if (evt.preventDefault) {
	
		evt.preventDefault();
		evt.stopPropagation();

	} else {

		evt.returnValue = false;
		evt.cancelBubble = true;
	}

i++;

	if (ii >= 1) {

		lib.EventoEliminar(document.querySelector('.liga'), 'click', n);
		lib.Evento(document.querySelector('.liga'), 'click', n = function(event) {foo(event, i)});

	}


alert(ii);
}


window.onload = function() {f()};
</script>
</head>
<body>

<a class="liga" href="#">click aquí</a>

</body>
</html>
gracias
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #2 (permalink)  
Antiguo 23/05/2013, 07:33
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: disasociar manejador evento ie8

Tenés que remover la función que asignas como handler.

En tu caso particular, fijate que asignas una función anonima y tratas de remover otra función anonima (es decir, no es la misma funcion).

Código Javascript:
Ver original
  1. (function() { fnc.call(elemento, window.event); }) === (function() { fnc.call(elemento, window.event); }); // false
__________________
blog | @aijoona
  #3 (permalink)  
Antiguo 23/05/2013, 07:51
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: disasociar manejador evento ie8

Aijoona, gracias por tomarte el tiempo

pero si está asignada a una variable para evitar tal hecho

creo que aún no he entendido el punto
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #4 (permalink)  
Antiguo 23/05/2013, 08:17
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: disasociar manejador evento ie8

Cuando registras un event handler lo que importa es la funcion que le asignas, para removerlo, tenes que pasarle una referencia a esa misma función.

Fijate la diferencia que haces entre addEventListener y attachListener, que a una le pasas la funcion original (y que despues podes remover) y al otro (IE) le pasas una funcion anonima de la cual no guardas referencia alguna (y por eso no podes remover)
__________________
blog | @aijoona

Etiquetas: Ninguno
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 19:03.