Foros del Web » Programando para Internet » Javascript »

Onmouseover sobre un objeto creado

Estas en el tema de Onmouseover sobre un objeto creado en el foro de Javascript en Foros del Web. Hola foreros! Tengo un problemilla, jeje... Mirar tengo un objeto que al situarse encima de el se le crea un objeto dentro de el. El ...
  #1 (permalink)  
Antiguo 09/01/2010, 15:04
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 8 meses
Puntos: 19
Onmouseover sobre un objeto creado

Hola foreros!

Tengo un problemilla, jeje... Mirar tengo un objeto que al situarse encima de el se le crea un objeto dentro de el. El problema es que si te situas encima del objeto creado nuevo es como si salieses del objeto que le creo.

Para que engañarnos... me explico de pena... asi que un ejemplo:

http://usuarios.multimania.es/salbatore/

El codigo javascript es super claro... ademas le he puesto comentarios... esos que tanto nos gustan!, jeje.

¿Hago algo mal?, no os podeis imaginar la de comida de tarro que me ha provocado este problema, jeje... despues de descubrir que el error no era por otras razones, al cabo de una semana, jeje... pero aun no se por que no va?... alguien sabe?

  #2 (permalink)  
Antiguo 09/01/2010, 16:54
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 11 meses
Puntos: 45
Respuesta: Onmouseover sobre un objeto creado

Buenas,
El problema está en que no se propaga el evento al nuevo elemento creado y la solución sería añadir los dos eventos con el método addEventListener( ).
Un saludo.
  #3 (permalink)  
Antiguo 09/01/2010, 17:12
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 8 meses
Puntos: 19
Respuesta: Onmouseover sobre un objeto creado

Hola Tecna,

¿Pero que eventos deberia ponerle?, es que no entiendo bien, jeje. He mirado mas de una vez el tema de addEventListener pero nunca me queda claro... o lo olvido, jeje. Por ejemplo como actuarian en mi script:


Código PHP:
<script>
            function 
mostrar()
                {
                    
//creamos el div
                        
eldiv document.createElement("div");
                    
//le añadismos el id
                        
eldiv.setAttribute("id""objeto_dom");
                    
//le introducimos algo de texto
                        
texto=document.createTextNode("Ahora si te situas sobre mi desaparezco, cuando no deberia desaparecer");
                        
eldiv.appendChild(texto);
                    
//lo introducimos donde queremos
                         
contenedor document.getElementById("div_contenedor_dom");
                         
contenedor.appendChild(eldiv);
                }
            function 
ocultar()
                {
                    
//seleccionamos el padre
                        
contenedor document.getElementById("div_contenedor_dom");
                    
//seleccionamos el elemento que queremos destruir
                        
eldiv document.getElementById("objeto_dom");
                    
//lo destruimos
                        
destruir contenedor.removeChild(eldiv);
                    
                }
            
        
</script> 
¿Donde hago lo de addEventListener y como?
  #4 (permalink)  
Antiguo 09/01/2010, 17:24
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, 6 meses
Puntos: 834
Respuesta: Onmouseover sobre un objeto creado

Probá así:
Código PHP:
function mostrar(e)
                {
                
evt|| event;
                var 
a=evt.relatedTarget || evt.fromElement
                
if(a==document.getElementById("div_contenedor_dom") || a==document.getElementById("objeto_dom")) return;
                    
//seleccionamos el padre
                    //creamos el div
                        
eldiv document.createElement("div");
                    
//le añadismos el id
                        
eldiv.setAttribute("id""objeto_dom");
                        
                    
//le introducimos algo de texto
                        
texto=document.createTextNode("Ahora si te situas sobre mi desaparezco, cuando no deberia desaparecer");
                        
eldiv.appendChild(texto);
                    
//lo introducimos donde queremos
                         
contenedor document.getElementById("div_contenedor_dom");
                         
                         
contenedor.appendChild(eldiv);
                }
            function 
ocultar(e)
                { 
                
evt|| event;
                var 
a=evt.relatedTarget || evt.toElement
                
if(a==document.getElementById("div_contenedor_dom") || a==document.getElementById("objeto_dom")) return;
                    
//seleccionamos el padre
                        
contenedor document.getElementById("div_contenedor_dom");
                    
//seleccionamos el elemento que queremos destruir
                        
eldiv document.getElementById("objeto_dom");
                    
//lo destruimos
                        
destruir contenedor.removeChild(eldiv);
                    
                } 
  #5 (permalink)  
Antiguo 09/01/2010, 17:27
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, 6 meses
Puntos: 834
Respuesta: Onmouseover sobre un objeto creado

Ah, me olvidaba: en las llamadas debés usar event:
Código PHP:
<fieldset id="div_contenedor_dom" onmouseout="ocultar(event);" onmouseover="mostrar(event);"  
  #6 (permalink)  
Antiguo 09/01/2010, 17:30
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 8 meses
Puntos: 19
Respuesta: Onmouseover sobre un objeto creado

Hola de nuevo!...

Panino5001!... como no!... oooo... que gusto... llevaba como una semana como un loco, jeje... me parecia un error tan raro, que no paraba de reescribir el codigo, jeje. El problema es que un error como este te salga en un monton de codigo... por lo menos yo dudo hasta de los colores, jeje.

Bueno... funciona fantasticamente como lo hiciste!.... muchas gracia de verdad!

Hasta pronto!
  #7 (permalink)  
Antiguo 09/01/2010, 17:31
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, 6 meses
Puntos: 834
Respuesta: Onmouseover sobre un objeto creado

Te recomiendo leas esto: http://kusor.net/traducciones/brainj...vents1.es.html
  #8 (permalink)  
Antiguo 09/01/2010, 18:48
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 11 meses
Puntos: 45
Respuesta: Onmouseover sobre un objeto creado

Buenas,

esta era mi solución:

eldiv.addEventListener('mouseover', function(e) {return mostrar();}, false);

eldiv.addEventListener('mouseout', function(e) {return ocultar();}, false);

El método addEventListener añade eventos a un objeto y acepta 3 parámetros: El primero es el nombre del tipo de evento a añadir, tiene que ir entrecomillado, en minúsculas y sin el prefijo on. El segundo es la función que se debe llamar cuando se produce el tipo de evento y el tercero es un valor booleano que indica si se capturan o no eventos durante la fase de propagación.

dificil ¿eh? podia haberlo dicho en el primer mensaje pero esperaba que intetaras buscar la información y dar con la solución por tus medios que siempre es mas gratificante antes de lanzarte a pedir mas ayuda. Si es un tema que no te quedó claro o se te olvidó éste sería un buen momento para recordarlo. Seguro que encuentras muchos documentación con ejemplos y consultas sobre este tema y otros en la wiki por ejemplo.

Un saludo.
  #9 (permalink)  
Antiguo 09/01/2010, 23:46
 
Fecha de Ingreso: noviembre-2008
Ubicación: Guadalajara, Concepcion de Buenos Aires, Mexico
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Onmouseover sobre un objeto creado

A ver calale asi:

Código HTML:
Ver original
  1. <div onmouseout="javascript:ocultar();" onmouseover="javascript:mostrar();"  ><fieldset id="div_contenedor_dom">
  2. <legend align="center">El error</legend>
  3. En este elemento si te situas sobre el se creara un aviso realizado por medio de DOM, el problema es que al situarse encima suyo lo detecta como estar fuera del objeto padre. Solo ocurre con los elementos creados por DOM.
  4. </div>
  #10 (permalink)  
Antiguo 09/01/2010, 23:48
 
Fecha de Ingreso: noviembre-2008
Ubicación: Guadalajara, Concepcion de Buenos Aires, Mexico
Mensajes: 60
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: Onmouseover sobre un objeto creado

A ver calale asi:

Código HTML:
Ver original
  1. <div onmouseout="javascript:ocultar();" onmouseover="javascript:mostrar();"  ><fieldset id="div_contenedor_dom">
  2. <legend align="center">El error</legend>
  3. En este elemento si te situas sobre el se creara un aviso realizado por medio de DOM, el problema es que al situarse encima suyo lo detecta como estar fuera del objeto padre. Solo ocurre con los elementos creados por DOM.
  4. </div>
  #11 (permalink)  
Antiguo 10/01/2010, 17:41
Avatar de salbatore  
Fecha de Ingreso: abril-2007
Ubicación: Springfield
Mensajes: 1.567
Antigüedad: 17 años, 8 meses
Puntos: 19
Respuesta: Onmouseover sobre un objeto creado

Hola de nuevo!,

He probado los dos codigos y me funcionan perfectamente aunque, la verdad, no se cual es mejor, jeje. En principio he usado el de tipo: eldiv.addEventListener('mouseover', function(e) {return mostrar();}, false); .

Ya lo siento pero despues de leerme todo el manual que Panino5001 me envia aun no he entendido como funciona, jeje. Entiendo que es como añadirle un evento al objeto creado, pero tal vez este buscando otra cosa, jeje.

Mirar despues de probarlo en un codigo que tengo algo mas complejo que el ejemplo me pregunto si lo que en realidad busco es como un actualizador del DOM, es decir, como si reconociese que el objeto que he creado es hijo de un hijo. Es decir... mi pregunta es:

¿Por que cuando creo el objeto con DOM este no es reconcido como hijo?, creo que esa es mi duda, por que en realidad yo no quiero añadir ningun evento particular al objeto particularmente sino a todo el conjunto de hijos del contenedor.

Se que me explico fatal, jeje... pero aun no comprendo como actuar... ¿No existe ningun modo de reiniciar, actualizar o reanudar el DOM?

Etiquetas: objeto, onmouseover
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 07:36.