Foros del Web » Programando para Internet » Javascript »

Problema con detachEvent

Estas en el tema de Problema con detachEvent en el foro de Javascript en Foros del Web. Hola, Tengo esta funcion para borrar eventos, en FF anda bien pero en IE da error: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código javascript : Ver original removeEvent = ...
  #1 (permalink)  
Antiguo 19/05/2009, 11:44
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Problema con detachEvent

Hola,
Tengo esta funcion para borrar eventos, en FF anda bien pero en IE da error:
Código javascript:
Ver original
  1. removeEvent=function(evType,fn){
  2.             if(this.removeEventListener){
  3.                 this.removeEventListener(evType, fn, false);
  4.             }else if (this.detachEvent){
  5.                 this.detachEvent("on"+evType, this[fn+evType+'n']);
  6.                 this[fn+evType+'n']=null;
  7.             }else{
  8.                 this['on'+evType]=function(){};
  9.             }
  10.         };
Proque da error
Gracias
Salu2
__________________
Half Music - www.halfmusic.com
  #2 (permalink)  
Antiguo 19/05/2009, 12:00
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
Puntos: 1485
Respuesta: Problema con detachEvent

que error te produce? type mismatch? de momento no entiendo la logica de esta linea:
Código:
this.detachEvent("on"+evType, this[fn+evType+'n']);
this[fn+evType+'n']=null;
si fn es una funcion, cuando se concatena una funcion y un string, es el equivalente de hacer function.toString() + string el cual produce algo como el codigo fuente de la funcion mas la cadena. este no es el tipo de valor que detachEvent requiere.

intentalo asi, practicamente igual como en removeEventListener:
Código:
this.detachEvent("on"+evType, fn);
  #3 (permalink)  
Antiguo 19/05/2009, 12:32
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Problema con detachEvent

Hola,
No me funciono y no da error esta ves. El codigo lo saque de este foro.
Gracias
Salu2
__________________
Half Music - www.halfmusic.com
  #4 (permalink)  
Antiguo 19/05/2009, 13:01
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
Puntos: 1485
Respuesta: Problema con detachEvent

otro detalle, no se si sea tu caso, aunque lo dudo. si fn es una funcion literal no te funcionara. considera el siguiente ejemplo donde se registra un evento click en el documento con un handler literal:
Código javascript:
Ver original
  1. document.attachEvent('onclick', function(){
  2. alert(arguments.length);
  3. });
  4.  
  5. document.detachEvent('onclick', function(){
  6. alert(arguments.length);
  7. });

este ejemplo registra el evento pero no remueve el evento. aunque las funciones son las mismas, tal parece que tanto attachEvent como detachEvent utilizan una referencia de la memoria de modo que fn debe ser una variable, funcion, o metodo previamente almacenada en alguna parte de tu codigo.

este detalle tambien aplica a para addEventListener y removeEventListener. pero segun tu no te funciona en la version para msie, de ahi que estimo que no sea tu caso. si estoy en lo correcto, necesitaria ver tu aplicacion en una forma mas completa para poder determinar donde esta el error.
  #5 (permalink)  
Antiguo 19/05/2009, 13:06
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Problema con detachEvent

Eso ya se :D
Pero es una funcion con nombre (function MiFuncon(...){...}).
__________________
Half Music - www.halfmusic.com
  #6 (permalink)  
Antiguo 19/05/2009, 13:15
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
Puntos: 1485
Respuesta: Problema con detachEvent

podrias mostrarme un ejemplo de como utilizas la funcion? ademas, donde se almacena la funcion, en una simple variable removeEvent o es este un metodo de un objeto o constructor?
  #7 (permalink)  
Antiguo 19/05/2009, 13:34
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Problema con detachEvent

Hola,
Este es un ejemplo:
Código javascript:
Ver original
  1. <script type="text/javascript">
  2. <!--
  3. function $(id){return document.getElementById(id);}
  4. function alertar(){
  5.     alert('Si!');
  6. }
  7. function detener(){
  8.     removeEvent.call($('prueba'),'click',alertar);
  9. }
  10. var addEvent=function(type, fn ) {
  11.             if ( this.addEventListener ) {
  12.                 this.addEventListener( type, fn, false );
  13.             } else if(this.attachEvent){
  14.                 var _this=this;
  15.                 var f= function(){fn.call(_this,window.event);};
  16.                 this.attachEvent( 'on'+type, f);
  17.                 this[fn.toString()+type]=f;
  18.             }else{
  19.                 this['on'+type]=fn;
  20.             }
  21.         };
  22. var removeEvent=function(evType,fn){
  23.             if(this.removeEventListener){
  24.                 this.removeEventListener(evType, fn, false);
  25.             }else if (this.detachEvent){
  26.                 this.detachEvent("on"+evType, this[fn+evType+'n']);
  27.                 this[fn+evType+'n']=null;
  28.             }else{
  29.                 this['on'+evType]=function(){};
  30.             }
  31.         };
  32.         onload=function(){
  33.             addEvent.call($('prueba'),'click',alertar);
  34.             addEvent.call($('prueba'),'mouseout',detener);
  35.         };
  36. -->
  37. </script>
  38. <div id="prueba" style="background-color:#CCCCCC; width:50px; height:50px;">Click!</div>
Gracias
Salu2
__________________
Half Music - www.halfmusic.com
  #8 (permalink)  
Antiguo 19/05/2009, 13:57
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
Puntos: 1485
Respuesta: Problema con detachEvent

justo lo que ya venia diciendo. produce error type mismatch porque esta utilizando un string para remover el evento. no le veo el uso de generar un string a base de la funcion. el siguiente codigo es una modificacion funcional.

Código javascript:
Ver original
  1. <script type="text/javascript"><!--
  2. function $(id){return document.getElementById(id);}
  3.  
  4. function alertar(){
  5. alert('Si!');
  6. }
  7.  
  8. function detener(){
  9. removeEvent.call($('prueba'),'click',alertar);
  10. }
  11.  
  12. var addEvent=function(type, fn ) {
  13.     if ( this.addEventListener ) {
  14.     this.addEventListener( type, fn, false );
  15.     } else if(this.attachEvent){
  16.     var _this = this;
  17.     this.attachEvent('on'+type, fn);
  18.     }else{
  19.     this['on'+type]=fn;
  20.     }
  21. };
  22.  
  23. var removeEvent = function(evType,fn){
  24.     if(this.removeEventListener){
  25.     this.removeEventListener(evType, fn, false);
  26.     }else if(this.detachEvent){
  27.     this.detachEvent("on"+evType, fn);
  28.     }else{
  29.     this['on'+evType]=null;
  30.     }
  31. };
  32.  
  33. onload=function(){
  34. addEvent.call($('prueba'),'click',alertar);
  35. addEvent.call($('prueba'),'mouseout',detener);
  36. };
  37. -->
  38. </script>
  39. <div id="prueba" style="background-color:#CCCCCC; width:50px; height:50px;">Click!</div>
  #9 (permalink)  
Antiguo 19/05/2009, 14:51
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Problema con detachEvent

Gracias, pero lo que pasa es que sin esto:
Código javascript:
Ver original
  1. var f= function(){fn.call(_this,window.event);};
  2.                 this.attachEvent( 'on'+type, f);
No resivo el this en la funcion.
__________________
Half Music - www.halfmusic.com
  #10 (permalink)  
Antiguo 19/05/2009, 16:33
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
Puntos: 1485
Respuesta: Problema con detachEvent

no comprendo cuando dices "revisar el this en la fucion". de la misma manera tampoco comprendo la razon por la que quieras hacerlo asi. pero bueno, aqui va la solucion. volviendo a tu ejemplo original la linea 26 y 27 tienen un caracter de mas.
Código:
this.detachEvent("on"+evType, this[fn+evType+'n']);
this[fn+evType+'n']=null;
  #11 (permalink)  
Antiguo 19/05/2009, 17:58
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 16 años, 7 meses
Puntos: 101
Respuesta: Problema con detachEvent

Ahh, gracias!! ahora anda bien
__________________
Half Music - www.halfmusic.com
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 11:11.