Foros del Web » Programando para Internet » Javascript »

Problema con addeventlistener al pasar event como variable ayuda!!!!riable

Estas en el tema de Problema con addeventlistener al pasar event como variable ayuda!!!!riable en el foro de Javascript en Foros del Web. HOLA: LLEVO HORAS TRATANDO DE SOLUCIONAR ESTE PROBLEMA Y NO HE PODIDO, OJALA ME PUEDAN AYUDAR, DE ANTEMANO MUCHAS GRACIAS POR SU TIEMPO. EL PROBLEMA ...
  #1 (permalink)  
Antiguo 19/08/2011, 01:47
 
Fecha de Ingreso: junio-2009
Mensajes: 33
Antigüedad: 14 años, 10 meses
Puntos: 1
Exclamación Problema con addeventlistener al pasar event como variable ayuda!!!!riable

HOLA:

LLEVO HORAS TRATANDO DE SOLUCIONAR ESTE PROBLEMA Y NO HE PODIDO, OJALA ME PUEDAN AYUDAR, DE ANTEMANO MUCHAS GRACIAS POR SU TIEMPO.
EL PROBLEMA ES EL SIGUIENTE:
RESULTA QUE TENGO UN BOTON QUE AL DAR CLICK LE AGREGO UNAS FUNCIONES CON ADDEVENTLISTENER. PINCHO UNA VEZ AGREGO UNAS FUNCIONES Y QUITO OTRAS, PINCHO OTRA VEZ Y REVIERTO EL PROCESO. ME FUNCIONA DE MARAVILLA. EL PROBLEMA ME HA SURGIDO HOY CUANDO LO PROBE EN FIREFOX Y PASA LO SIGUIENTE:
AL DAR CLICK NECESITO SABER LA POSICION DEL PUNTERO, PARA ELLO TENGO UNA FUNCION QUE ME REALIZA LA OPERACION, EL PROBLEMA ES QUE PARA HALLAR ESA POSICION UTILIZO LA SIGUIENTE LINEA:
Código Javascript:
Ver original
  1. posicionx=event.x-posicion_div_x+document.body.scrollLeft;
  2.     posiciony=event.y-posicion_div_y+document.body.scrollTop;

EN TODOS LOS NAVEGADORES FUNCIONA BIEN, EL PROBLEMA SURGE CON FIREFOX PUES ME DICE QUE "EVENT" NO ESTA DEFINIDO. YA SE QUE PARA FIREFOX CUANDO LLAMO LA FUNCION DEBO PASAR EL EVENTO COMO PARAMETRO, EL PROBLEMA ES QUE LA FUNCION DE POSICION DEL PUNTERO PREVIAMENTE LA HE AÑADIDO CON EL ADDEVENTLISTENER Y SI TRATO DE PASAR "EVENT" COMO PARAMETRO ME DICE NUEVAMENTE QUE NO SE HA DEFINIDO, Y SI LO PASO ENTRECOMILLAS LO PASA COMO UNA SIMPLE CADENA DE TEXTO Y NO COMO EL EVENTO QUE NECESITO. ESPERO HABER SIDO CLARO. ACA VA EL CODIGO.
Código Javascript:
Ver original
  1. function posicion_puntero(e)
  2. {
  3.     document.getElementById('capa_tag').style.display='none';
  4.     if(navegador == 'explorer')
  5.     {
  6.         posicion_div_y=document.getElementById("div_imagen").offsetParent.offsetTop;
  7.         posicion_div_x=document.getElementById("div_imagen").offsetParent.offsetLeft;
  8.     }
  9.     else
  10.     {
  11.         posicion_div_y=document.getElementById("div_imagen").offsetTop;
  12.         posicion_div_x=document.getElementById("div_imagen").offsetLeft;
  13.     }
  14.    
  15.     posicionx=event.x-posicion_div_x+document.body.scrollLeft;
  16.     posiciony=event.y-posicion_div_y+document.body.scrollTop;
  17.    
  18.     document.getElementById('coordx').value=posicionx;
  19.     document.getElementById('coordy').value=posiciony;
  20.     animatedcollapse.show('capa_tag');
  21.     var capa_tag=document.getElementById('capa_tag');
  22.     ancho_capa=capa_tag.offsetWidth;
  23.     capa_medio=ancho_capa/2;
  24.     /*capa_tag.style.top=(posicion_div_y+posiciony)+30+"px";
  25.     capa_tag.style.left=(posicion_div_x+posicionx)-capa_medio+"px";*/
  26.     capa_tag.style.top=(posiciony)+30+"px";
  27.     capa_tag.style.left=(posicionx)-capa_medio+"px";
  28.     var capa_target=document.getElementById('capa_target');
  29.     capa_target.style.display='block';
  30.     capa_target.style.top=(posiciony)-25+"px";
  31.     capa_target.style.left=(posicionx)-25+"px";
  32.    
  33. }

ACA AGREGO LA FUNCION ANTERIOR AL BOTON:

Código Javascript:
Ver original
  1. function taggea(men_finaliza, men_original, auto) {
  2. document.getElementById('boton_tag').innerHTML=men_finaliza;
  3. document.getElementById('boton_tag').style.backgroundImage="url(images/fondo-tagging-2.png)";
  4.             botontag=document.getElementById('boton_tag');
  5.             x=document.getElementById('imagen_world');
  6.             x.style.cursor="crosshair";
  7.             checkCookie('ayuda_tag');
  8.             if(tienecookie !== true)
  9.             {
  10.                 muestraAyuda(auto);
  11.             }
  12.         if (x.addEventListener){
  13.             x.addEventListener('click', function(){posicion_puntero('e')},false);
  14.             botontag.removeEventListener('click',function(){taggea;}, false);
  15.             botontag.onclick="";
  16.             botontag.addEventListener("click", function(){ taggea_ya_no(men_finaliza, men_original, auto)} , false);
  17.         } else {
  18.             x.attachEvent('onclick',posicion_puntero);
  19.             botontag.detachEvent ('onclick', taggea);
  20.             botontag.onclick = function(){taggea_ya_no(men_finaliza, men_original,auto);};
  21.         }
  22.     }

SE QUE AQUI HAY PERSONAS QUE CONOCEN MUCHO DEL TEMA, ESPERO QUE PORFAVOR ME PUEDAN AYUDAR PUES YA HE LEIDO, PROBADO Y PROBADO Y SIGO SIN PODER AGREGAR LA FUNCION EN FIREFOX, EN EL RESTO FUNCIONA A LAS MIL MARAVILLAS

GRACIAS
  #2 (permalink)  
Antiguo 19/08/2011, 07:56
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Problema con addeventlistener al pasar event como variable ayuda!!!!riabl

A) No le estás pasando el evento a la función:
Cita:
x.addEventListener('click', function(){posicion_puntero('e')},false);
Primero porque en todo caso sería e, no "e"; y después porque primero deberías pasárselo como argumento a la función contenedora. Como no lo encuentra en arguments, va buscando hacia arriba para ver si encuentra e, y como no lo encuentra da error. De todas maneras, mejor usar el handler, para poder usar removeEventListener después:
Cita:
x.addEventListener('click', posicion_puntero, false);
B) removeEventListener/detachEvent necesitan como argumento el mismo handler que se usó al añadir el evento, y puesto que:
Cita:
var a = function(){ return 'a'; };
var b = function(){ return 'a'; };
a == b; // false
tu solución de encapsular las funciones no es viable, a no ser que lo almacenes en una variable, pero no le veo el sentido.

C) ¿A TI NO TE HAN DICHO NUNCA QUE ESCRIBIR EN MAYÚSCULAS EN INTERNET ES COMO SI GRITARAS?
Saludos.
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #3 (permalink)  
Antiguo 19/08/2011, 11:33
 
Fecha de Ingreso: junio-2009
Mensajes: 33
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Problema con addeventlistener al pasar event como variable ayuda!!!!riabl

Gracias por tu respuesta, intenté pasar el evento como parametro desde la funcion inicial, pero sigue presentando el problema, ya no se que hacer...
estos fueron los cambios.
Código Javascript:
Ver original
  1. function posicion_puntero(e)
  2. {//mas adelante
  3. event = e;
  4. posicionx=e.x-posicion_div_x+document.body.scrollLeft;
  5.     posiciony=e.y-posicion_div_y+document.body.scrollTop;

Código Javascript:
Ver original
  1. function taggea(men_finaliza, men_original, auto, event) {
  2. //mas adelante:
  3. if (x.addEventListener){
  4.             x.addEventListener('click', function(){posicion_puntero(event)},false);
  5.             botontag.removeEventListener('click',function(){taggea;}, false);
  6.             botontag.onclick="";
  7.             botontag.addEventListener("click", function(){ taggea_ya_no(men_finaliza, men_original, auto, event)} , false);
  8.         }

Código Javascript:
Ver original
  1. function taggea_ya_no(men_finaliza, men_original, auto, event) {
  2. //mas adelante:
  3. if (boton.addEventListener){
  4.             a.removeEventListener('click',posicion_puntero, false);
  5.             boton.onclick="";
  6.             botontag.removeEventListener('click',function(){taggea_ya_no;}, false);
  7.             boton.addEventListener("click", function(){ taggea(men_finaliza, men_original, auto, event)} , false);
  8.            
  9.             }

En los demas navegadores sigue funcionando, en firefox me aparece como error que e no esta definida....
se meacaban las ideas no se que mas intentar
gracias
  #4 (permalink)  
Antiguo 19/08/2011, 12:52
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Problema con addeventlistener al pasar event como variable ayuda!!!!riabl

a lo que te ha explicado _cronos2
  • punto A (sin resultado). prueba así; x.addEventListener('click', function(event){posicion_puntero(event)},false);
  • punto B (ni caso). un poco de lectura
  • punto C (has corregido)
  #5 (permalink)  
Antiguo 19/08/2011, 13:07
 
Fecha de Ingreso: junio-2009
Mensajes: 33
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Problema con addeventlistener al pasar event como variable ayuda!!!!riabl

Hola isabel muchas gracias.....
pasando event como me has puesto en el punto 2 digamos que hemos avanzado un monton, el script se ejecuta incluso en firefox pero en este no me determina la posicion del puntero...
Código Javascript:
Ver original
  1. function posicion_puntero(event)
  2. {
  3.     document.getElementById('capa_tag').style.display='none';
  4.     if(navegador == 'explorer')
  5.     {
  6.         posicion_div_y=document.getElementById("div_imagen").offsetParent.offsetTop;
  7.         posicion_div_x=document.getElementById("div_imagen").offsetParent.offsetLeft;
  8.     }
  9.     else
  10.     {
  11.         posicion_div_y=document.getElementById("div_imagen").offsetTop;
  12.         posicion_div_x=document.getElementById("div_imagen").offsetLeft;
  13.     }
  14.     //alert(event.x);
  15.     posicionx=event.x-posicion_div_x+document.body.scrollLeft;
  16.     posiciony=event.y-posicion_div_y+document.body.scrollTop;

posicionx me aparece como indefinida...
no se que estoy haciendo mal
gracias
  #6 (permalink)  
Antiguo 19/08/2011, 13:25
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Problema con addeventlistener al pasar event como variable ayuda!!!!riabl

venga hombre, no es tan difícil. pon un poco de tu parte. lee esto
  #7 (permalink)  
Antiguo 19/08/2011, 13:38
 
Fecha de Ingreso: junio-2009
Mensajes: 33
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Problema con addeventlistener al pasar event como variable ayuda!!!!riabl

Ya listo :) casi no .... gracias a la ayuda de ustedes, luego de pasar event com oparametro como mencione en la respuesta anterior (gracias a su ayuda) no me daba la posicion del puntero por lo siguiente:
Código Javascript:
Ver original
  1. posicionx=e.x-posicion_div_x+document.body.scrollLeft;
  2.         posiciony=e.y-posicion_div_y+document.body.scrollTop;

lo cambie por esto:
Código Javascript:
Ver original
  1. if(navegador == 'explorer')
  2.     {      
  3.         posicionx=e.x-posicion_div_x+document.body.scrollLeft;
  4.         posiciony=e.y-posicion_div_y+document.body.scrollTop;      
  5.     }
  6.     else
  7.     {      
  8.         posicionx=e.clientX - posicion_div_x+document.body.scrollLeft;
  9.         posiciony=e.clientY - posicion_div_y+document.body.scrollTop;  
  10.     }

Notese que solo agregué "clientX". Punto resuelto,

AHORA LO SIGUIENTE:

Lo que mencionaron en el punto B, para remover el evento, no entiendo muy bien cual es el error que me señalan, y efectivamente esta ocurriendo. En explorer funciona bien pero en el resto no remueve las funciones..
un ultimo empujoncito
gracias
  #8 (permalink)  
Antiguo 19/08/2011, 14:36
 
Fecha de Ingreso: junio-2009
Mensajes: 33
Antigüedad: 14 años, 10 meses
Puntos: 1
Problema con removeeventlistener, no remueve la funcion en chrome y firefox

Hola, el problema es el siguiente:
tengo asignado a un boton una serie de funciones que quito y pongo segun vaya haciendo click.
En internet explorer con detachEvent me funciona bien
pero en el resto de navegadores es toy agregando las funciones pero no me elimina las que indico con removeeventlistener....
Agradeceria si alguien ve donde esta el error
gracias
Código Javascript:
Ver original
  1. function taggea(men_finaliza, men_original, auto, event) {
  2. document.getElementById('boton_tag').innerHTML=men_finaliza;
  3. document.getElementById('boton_tag').style.backgroundImage="url(images/fondo-tagging-2.png)";
  4.             botontag=document.getElementById('boton_tag');
  5.             x=document.getElementById('imagen_world');
  6.             x.style.cursor="crosshair";
  7.             checkCookie('ayuda_tag');
  8.             if(tienecookie !== true)
  9.             {
  10.                 muestraAyuda(auto);
  11.             }
  12.         if (x.addEventListener){
  13.             x.addEventListener('click', function(event){posicion_puntero(event)},false);
  14.             botontag.removeEventListener('click',taggea, false);
  15.         } else {
  16.             x.attachEvent('onclick',posicion_puntero);
  17.             botontag.detachEvent ('onclick', taggea);
  18.             };
  19.         }
  20.     }

He mostrado la funcion taggea y luego pretendo eliminarla para que no aparezca mas pero no funciona.
Asi la llamo de html:
Código HTML:
Ver original
  1. onclick="taggea('finalizar', 'mi familia', 1, event);"
  #9 (permalink)  
Antiguo 19/08/2011, 14:39
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Problema con addeventlistener al pasar event como variable ayuda!!!!riabl

presta atención a lo que _cronos2 te lo has explicado y a la liga que te he proporcionado
  #10 (permalink)  
Antiguo 19/08/2011, 14:48
 
Fecha de Ingreso: junio-2009
Mensajes: 33
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Problema con addeventlistener al pasar event como variable ayuda!!!!riabl

isabel agradezco tu ayuda, pero no entiendo, he leido cien veces lo qu eme han escrito y no lo logro, si conoces la solucion podrias decirmela?? la solucion no es volver a hacer el script solo indicarme donde estoy fallando.
no quisiera mas acertijos
muchas gracias
  #11 (permalink)  
Antiguo 19/08/2011, 14:49
Avatar de jseros  
Fecha de Ingreso: agosto-2008
Ubicación: Bogotá
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 18
Respuesta: Problema con removeeventlistener, no remueve la funcion en chrome y firefo

Cuando asignas un evento desde los atributos HTML no agregar funciones a la cola de eventos. Atributos como Onclick sólo pueden ejecutar el "código" que le asignas en ese momento, así, si posteriormente haces element.onclick="alert('sorpresa!');" tu código anterior no se va a ejecutar. En tu caso en particular te recomiendo quitar el onclick y hacer algo como esto.

Código Javascript:
Ver original
  1. elemento.addEventListener('click',function(evt){
  2.    taggea('finalizar', 'mi familia', 1, evt);
  3. } ,false);

Saludos
  #12 (permalink)  
Antiguo 19/08/2011, 14:53
 
Fecha de Ingreso: junio-2009
Mensajes: 33
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Problema con removeeventlistener, no remueve la funcion en chrome y firefo

A ti que te encanta leer y anallizar, el otro post "EN SU TITULO" no dice nada de "REMOVEEVNTLISTENER" dice es "PROBLEMA CON ADDEVENTLISTENER.." "ADD" para agregar "event como parametro.a
Este es otro problema que ni siquiera sabia que tenia pero que gracias _cronos2 ,me hizo caer en cuenta.

Abro este nuevo tema para cuestion de claridad del problema, y para ver si alguien me puede hacer dar cuenta de mi errror, y no ponerme con acertijos.
gracias
  #13 (permalink)  
Antiguo 19/08/2011, 15:06
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: Problema con removeeventlistener, no remueve la funcion en chrome y firefo

Cita:
Iniciado por hernandavidgomez Ver Mensaje
Abro este nuevo tema para cuestion de claridad del problema, y para ver si alguien me puede hacer dar cuenta de mi errror, y no ponerme con acertijos.
gracias
Mejor continuemos en el mismo tema.
Temas unidos
  #14 (permalink)  
Antiguo 19/08/2011, 15:24
 
Fecha de Ingreso: junio-2009
Mensajes: 33
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Problema con addeventlistener al pasar event como variable ayuda!!!!riabl

Gracias jseros por darme una orientacion a mi problema.
No se si entendí bien l que me dijiste, pero he quitado el onclick como atributo de la etiqeta en HTML,
en lugar de eso he puesto en onload del body una nueva funcion oara que cargue la funcion original.
este es el codigo:
Código Javascript:
Ver original
  1. function cargaOnclick(men_finaliza, men_original, auto, evt)
  2. {
  3.     botontag=document.getElementById('boton_tag');
  4.     if(botontag.addEventListener)
  5.     {
  6.         botontag.addEventListener('click',function(evt){
  7.            taggea(men_finaliza, men_original, auto, evt);
  8.         } ,false);
  9.     }
  10.     else
  11.     {
  12.         botontag.onclick = function(){taggea(men_finaliza, men_original, auto, evt);};
  13.     }
  14. }

En internet explorer funciona perfecto, pero en el resto de navegadores no quita la funcio orifginal!
no se que hacer
ayuda
  #15 (permalink)  
Antiguo 19/08/2011, 15:37
Avatar de jseros  
Fecha de Ingreso: agosto-2008
Ubicación: Bogotá
Mensajes: 218
Antigüedad: 15 años, 8 meses
Puntos: 18
Respuesta: Problema con addeventlistener al pasar event como variable ayuda!!!!riabl

En efecto cometí un error y que claramente estás intentado remover la función taggea del elemento pero estás agregando una función wrapper que ejecuta taggea. En ese caso, lo primero que se me viene a la cabeza es almacenar la referencia de la función wrapper y así poder agregarla y removerla de la cola de eventos.

Código Javascript:
Ver original
  1. var taggeaWrapper = function(evt){
  2.      taggea(men_finaliza, men_original, auto, evt);
  3. } ,false);


Así luego haces

botontag.addEventListener('click', taggeaWrapper,...
y
botontag.removeEventListener('click', taggeaWrapper,...

Según corresponda.
  #16 (permalink)  
Antiguo 22/08/2011, 17:11
 
Fecha de Ingreso: junio-2009
Mensajes: 33
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Problema con addeventlistener al pasar event como variable ayuda!!!!riabl

jseros Muchas gracias!
fue la solucion a todos mis males.
mil mil gracias



Etiquetas: addeventlistener, chrome, event, firefox, noremueve, parametros, removeeventlistener
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 06:39.