Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] AddEventListener Problema al intentar capturar su Id

Estas en el tema de AddEventListener Problema al intentar capturar su Id en el foro de Javascript en Foros del Web. Buenas! Tengo un problema a la hora de usar AddEventListener, Lo que intento Obtener ; HTML: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original < div onmouseover ...
  #1 (permalink)  
Antiguo 24/02/2013, 22:27
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Pregunta AddEventListener Problema al intentar capturar su Id

Buenas!

Tengo un problema a la hora de usar AddEventListener, Lo que intento Obtener ;

HTML:
Código HTML:
Ver original
  1. <div onmouseover="this.style.opacity = 1"> </div>


Lo que hasta ahora mas me he aproximado pero sin conseguir el resultado :

Javascript:
Código Javascript:
Ver original
  1. document.getElementById(this.ID/* Es una propiedad definida dinamicamente, es como la clabe primaria en MySQL cada vez que se crea un div nuevo esta propiedad adquiere automaticamente :This.ID++ */).addEventListener("mouseover", function () {this.style.opacity = 1;}, false);


Ovbiamente, el fallo, es que no consigo obtener el id de forma correcta, he probado con :

Código Javascript:
Ver original
  1. .addEventListener("mouseover", function () {document.getElementById(this.ID) = 1;}, false);

Pero no funciona por que this.ID es una propiedad que esta autoincrementandose siempre, y si hago referencia a ella, se le esta pasando el ultimo valor y no el que yo quiero ¿alguna sugerencia para capturar de forma correcta el id?
  #2 (permalink)  
Antiguo 25/02/2013, 00:01
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 9 meses
Puntos: 103
Respuesta: AddEventListener Problema al intentar capturar su Id

Cita:
/* Es una propiedad definida dinamicamente, es como la clabe primaria en MySQL cada vez que se crea un div nuevo esta propiedad adquiere automaticamente :This.ID++ */
quien creo esta variable ?? el navegador ?? tu ??
no referencias el momento de la creación, deberia ser una variable que se crea dentro de la función , si fuera global, estas usando el this. mal.

si tu respuesta es el navegador, lo siento, el navegador no genera eso, a lo sumo genera el this.id ( que seria en caso de que estes adentro de un objeto del DOM, el cual da el resultado el id, y no es numerico, es una cadena, y fijate la diferencia entre mayusculas/minusculas )

Cita:
Pero no funciona por que this.ID es una propiedad que esta autoincrementandose siempre, y si hago referencia a ella, se le esta pasando el ultimo valor y no el que yo quiero ¿alguna sugerencia para capturar de forma correcta el id?
si, pero cuando ejecutas esto
Cita:
document.getElementById(this.ID).«mas codigo»
estas obteniendo el valor actual de this.ID, no se actualiza "dinamicamente"

hay algo que estas haciendo mal, explica mas tu codigo, y para verificar mejor, agregale una linea antes de que le asignas el addEventListener a tu objeto, con lo siguiente
Código Javascript:
Ver original
  1. console.log('resultado: '+ this.ID);

y fijate en la consola de tu navegador web que resultados te da, y dejalos aqui ( si dice resultado: undefined, es porque this.ID no existe )

un saludo
  #3 (permalink)  
Antiguo 25/02/2013, 00:17
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: AddEventListener Problema al intentar capturar su Id

Ovbiamente this.ID es una propiedad del prototipo, es decir es una variable de una clase que yo he declarado.



No queria poner un trozo gordo de codigo, ya que mi duda es solo referente a una linea de código completa, pero a tu petición : el bloque de codigo :


Código Javascript:
Ver original
  1. //Incremento el this.ID ahora por que hay una funcion previa que ya inicializa el primer ID para el Primer Div.
  2.         this.ID++;
  3.        
  4.         capa = document.getElementById('divContenedorDeEsteYotrosDivQueSeGeneranAutomaticamenteConEsteModelaDor');     
  5.         contenedor = document.createElement('div');
  6.         contenedor.id = this.ID;
  7.         contenedor.className = 'ClaseCSSDeprueva';
  8.         capa.appendChild(contenedor);
  9.         document.getElementById(this.ID).addEventListener("mouseover", function () {this.style.opacity = 1;}, false);


El debugger de Chrome no aportada nada(no alerta de ningún error), llevo medio dia con este problema, si el Debugger me aportara algún dato de error posiblemente no tendria que acudir aquí (ahora mas que nunca es cuando intento sacar por mi mismo las soluciones, ovbiamente aun se me resiste algun trozo de codigo), en la misma consola de chrome, puedo ver que el evento listener si se añadio, pero no ejecuta correctamente el codigo por que como digo necesito sonsacar correctamente la ID concreta.

Última edición por Albuss; 25/02/2013 a las 00:24
  #4 (permalink)  
Antiguo 25/02/2013, 00:52
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 9 meses
Puntos: 103
Respuesta: AddEventListener Problema al intentar capturar su Id

this.ID lo estas tratando como un entero, en tal caso lo podrias tratar asi
Código Javascript:
Ver original
  1. this.ID++;
  2.        
  3.         capa = document.getElementById('divContenedorDeEsteYotrosDivQueSeGeneranAutomaticamenteConEsteModelaDor');      
  4.         contenedor = document.createElement('div');
  5.         contenedor.id = this.ID + ''; // aplicandolo como string
  6.         contenedor.className = 'ClaseCSSDeprueva';
  7.         capa.appendChild(contenedor);
  8.         document.getElementById(this.ID+'').addEventListener("mouseover", function () {this.style.opacity = 1;}, false);


y otra cosa, no seria mas facil hacero asi ??

Código Javascript:
Ver original
  1. this.ID++;
  2.        
  3.         capa = document.getElementById('divContenedorDeEsteYotrosDivQueSeGeneranAutomaticamenteConEsteModelaDor');      
  4.         contenedor = document.createElement('div');
  5.         contenedor.id = this.ID + ''; // aplicandolo como string
  6.         contenedor.className = 'ClaseCSSDeprueva';
  7.         capa.appendChild(contenedor);
  8.         contenedor.addEventListener("mouseover", function () {this.style.opacity = 1;}, false);

en vez de buscarlo, ya que tenes el elemento DOM, aplicarlo directamente

un saludo
  #5 (permalink)  
Antiguo 25/02/2013, 01:22
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: AddEventListener Problema al intentar capturar su Id

Cita:
Iniciado por chwc Ver Mensaje
Código Javascript:
Ver original
  1. contenedor.id = this.ID + ''; // aplicandolo como string
El modelador de div funciona bien, de hecho el valor this.ID es una pieza clave dentro del prototipo (clase) y no me ha dado ningún solo error al respecto, no veo por que es necesario tratarlo como dices tu.

Cita:
Iniciado por chwc Ver Mensaje
y otra cosa, no seria mas facil hacero asi ??

Código Javascript:
Ver original
  1. contenedor.addEventListener("mouseover", function () {this.style.opacity = 1;}, false);
Ya probe , no funciona, y el debugger de chrome no dice nada, creo que es por que 'contenedor' es solo la instancia temporal de un metodo del DOM : .createElement
  #6 (permalink)  
Antiguo 25/02/2013, 01:32
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 9 meses
Puntos: 103
Respuesta: AddEventListener Problema al intentar capturar su Id

de hecho, hay algo mal, cree y probe esto http://jsfiddle.net/xTnbT/1/ , y funciona a la perfección, asi que no tendria problemas en aplicarle el addEventListener a "contenedor"

me estoy quedando sin palabras, lo unico que se me ocurre es que no se ejecute, nose que pasa
  #7 (permalink)  
Antiguo 25/02/2013, 02:02
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: AddEventListener Problema al intentar capturar su Id

El evento ya te comente que se ejecuta sin errores, pero no como yo quiero, es decir, cuando ocurre , lo aplica al ULTIMO ID, es decir, referencia a this.ID (valor actual) , cuando lo que yo busco, es el ID del Div creado.

¿que div ID, te sale cuando se lanza el evento?, prueba con un alert+this. a ver que sale. Ami me da el ultimo ID :(



Gracias por responder las tres veces y implicarte de esta forma.
  #8 (permalink)  
Antiguo 25/02/2013, 02:07
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 9 meses
Puntos: 103
Respuesta: AddEventListener Problema al intentar capturar su Id

a mi me sale bien, pero uso this.id en vez de this.ID, ya que al crear el elemento, le estas asignando el .id, no el .ID

http://jsfiddle.net/xTnbT/2/

le agrege un evento onclick, asi que clickealos nomas

un saludo!!
  #9 (permalink)  
Antiguo 25/02/2013, 02:16
Avatar de Albuss  
Fecha de Ingreso: enero-2012
Ubicación: Coruña
Mensajes: 475
Antigüedad: 12 años, 3 meses
Puntos: 30
Respuesta: AddEventListener Problema al intentar capturar su Id

Okey, revisare de arriba a bajo otra vez toda la clase a que por que no puedo obtener el mismo resultado que tu, gracias!
  #10 (permalink)  
Antiguo 25/02/2013, 08:53
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: AddEventListener Problema al intentar capturar su Id

En referencia a tu objetivo
Código:
<div onmouseover="this.style.opacity = 1"> </div>
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <title>addEvent + variable</title>
  3.  
  4. td{
  5. cursor: pointer;
  6. }
  7. div#uno{
  8. background: #000;
  9. opacity: .5;
  10. width:100px;
  11. height:100px;
  12. }
  13. // cambia opacidad
  14. function cambiaOpc(elem,v) {
  15. elem.style.opacity = v;  
  16. }
  17.  
  18. // agregar Evento
  19. window.onload = function(){
  20.   var el = document.getElementById("uno");
  21.   el.addEventListener("mouseover", function(){cambiaOpc(el,'1')}, false); // pasas el objeto como parámetro a la función
  22. }
  23.  </head>
  24.   <div id="uno"></div>
  25. </body>
  26. </html>

o bien le ponés un id al div, ó lo identificas de alguna otra manera,
Código:
document.getElementsByTagName('div')[0];
por ejemplo

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

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 00:28.