Foros del Web » Programando para Internet » Javascript »

[DOM] : como clonar un elemento+eventos?

Estas en el tema de [DOM] : como clonar un elemento+eventos? en el foro de Javascript en Foros del Web. loading............ Tengo un obejto tipo DIV... con un evento var objectoDiv=document.createElement("div"); objetoDiv.addEventListener("click", funcionRetorno,true); var div2 = objectoDiv.cloneNode(true); bueno div2 es el objeto clonado pero el ...
  #1 (permalink)  
Antiguo 08/03/2007, 08:55
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
[DOM] : como clonar un elemento+eventos?

loading............

Tengo un obejto tipo DIV... con un evento

var objectoDiv=document.createElement("div");
objetoDiv.addEventListener("click", funcionRetorno,true);
var div2 = objectoDiv.cloneNode(true);

bueno div2 es el objeto clonado pero el evento no se clona.... acaso esto no es posible? :S

gracias :D


connection closed.
__________________

Maborak Technologies
  #2 (permalink)  
Antiguo 08/03/2007, 09:42
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Re: [DOM] : como clonar un elemento+eventos?

Hola:

Los eventos creados dinámicamente no lo sé, pero si están definidos desde el prncipio se clonan también...

Fíjate en este ejemplo:

Código:
<html>
<head>
<title>
	Clonación
</title>
<script type="text/javascript">
function sube(que) {
	var nuevo = que.cloneNode(true);
	que.parentNode.appendChild(nuevo);
	que.parentNode.removeChild(que);
}
</script>
</head>
<body >
<div id="contenedor" style="position: relative; height: 200px">
<div id="amarillo" style="width: 120px; height: 120px; background-color: yellow; position: absolute; top: 5px; left: 5px; border: 1px solid black" onclick="sube(this)"></div>
<div id="rojo" style="width: 120px; height: 120px; background-color: red; position: absolute; top: 35px; left: 35px; border: 1px solid black" onclick="sube(this)"></div>
<div id="azul" style="width: 120px; height: 120px; background-color: blue; position: absolute; top: 65px; left: 65px; border: 1px solid black" onclick="sube(this)"></div>
</div>
</body>
</html>
Pinchando sobre cualquier recuadro se clona y superpone al resto, manteniendo estilos y eventos (sirve pas simular un z-index alto...)

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 08/03/2007, 09:43
Avatar de demiurgo_daemon  
Fecha de Ingreso: diciembre-2006
Ubicación: Querétaro
Mensajes: 184
Antigüedad: 17 años, 11 meses
Puntos: 2
Re: [DOM] : como clonar un elemento+eventos?

según yo, al momento de clonar no se agrega el evento, ya que no es un atributo del elemento (de lo contrario, nadie saldría de
Código:
elemento.onclick
en primer lugar ). piénsalo como en un ide, tipo netbeans o visual studio: si pones un botón y le asignas un evento, al copiarlo puede suceder una de dos cosas:
  1. los manejadores de eventos no se copian; tienes que escribirlo a mano o asignarlo como el original
  2. sí se copian, pero de manera explícita; es decir, se duplica el código, con todo y el manejador de evento

el mensaje de caricatos refuerza lo que te digo, elemento.onclick es un atributo del elemento, pero addeventlistener no agrega un atributo, sino el manejador que está en otro lado por completo.

saludos

Última edición por demiurgo_daemon; 08/03/2007 a las 09:45 Razón: leí el mensaje de caricatos
  #4 (permalink)  
Antiguo 08/03/2007, 10:07
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
Re: [DOM] : como clonar un elemento+eventos?

loading............

Quiero tener un manejador de eventos orientado a los elementos pero sin usar atributos para ello.... hay alguna forma de saber si un elemento tiene ya un evento asignado? para de esta forma recorrer los elementos clonados .. clonando igual sus eventos

connection closed.
__________________

Maborak Technologies
  #5 (permalink)  
Antiguo 08/03/2007, 11:43
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 20 años, 10 meses
Puntos: 13
Re: [DOM] : como clonar un elemento+eventos?

¿Y por qué no simplemente vuelves a asignar el mismo evento al elemento clonado?

Código:
var objectoDiv=document.createElement("div");
objetoDiv.addEventListener("click", funcionRetorno,true);
var div2 = objectoDiv.cloneNode(true);
div2.addEventListener("click", funcionRetorno,true);
__________________
El conocimiento es libre: Movimiento por la Devolución
  #6 (permalink)  
Antiguo 09/03/2007, 10:45
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
Re: [DOM] : como clonar un elemento+eventos?

loading............


No lo veo portable, porque clono por ejemplo una tabla con muchos divs e imagenes y ahi tengo como 60 eventos diferentes...... es igual me toparia con tener que saber que evento le corresponde a un elemento X en base a un elemento Y


connection closed.
__________________

Maborak Technologies
  #7 (permalink)  
Antiguo 17/03/2007, 12:06
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
Re: [DOM] : como clonar un elemento+eventos?

loading............


nadie? :(


connection closed.
__________________

Maborak Technologies
  #8 (permalink)  
Antiguo 17/03/2007, 17:16
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 1 mes
Puntos: 45
Re: [DOM] : como clonar un elemento+eventos?

Curioso como esto sí que funciona...

Código PHP:
function funcionRetorno() {
    
alert("ja");
}
var 
objetoDiv=document.createElement("<div onclick='funcionRetorno()'>aa</div>");
//objetoDiv.onclick=funcionRetorno;
var div2 objetoDiv.cloneNode(true);

alert(div2.onclick); 
Quizas haya que implementar un cloneNodeMejorado para recorrer tods los eventos del objeto y copiarlos
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #9 (permalink)  
Antiguo 18/03/2007, 11:44
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años, 6 meses
Puntos: 35
Re: [DOM] : como clonar un elemento+eventos?

loading...........


eso funciona porque tema a onclick como un atributo del objeto pero no los event handlers x(


connection closed
__________________

Maborak Technologies
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 07:35.