Foros del Web » Programando para Internet » Javascript »

Caso raro con innerHTML

Estas en el tema de Caso raro con innerHTML en el foro de Javascript en Foros del Web. Hola quiero imprimir con javascript con innerHTML el siguiente codigo html : @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original < div id = "content" >   ...
  #1 (permalink)  
Antiguo 24/08/2012, 06:47
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Pregunta Caso raro con innerHTML

Hola quiero imprimir con javascript con innerHTML el siguiente codigo html :

Código HTML:
Ver original
  1. <div id="content">
  2.         <div class="slider">
  3.             <div class="sliderContent">
  4.                 <div class="item">
  5.                     <img src="snimki/1.jpg" alt="" />
  6.                    
  7.                 </div>
  8.                 <div class="item">
  9.                     <img src="snimki/2.jpg" alt="" />
  10.                 </div>
  11.                 <div class="item">
  12.                     <img src="snimki/3.jpg" alt="" />
  13.                 </div>
  14.                 <div class="item">
  15.                     <img src="snimki/4.jpg" alt="" />
  16.                 </div>
  17.                 <div class="item">
  18.                     <img src="snimki/5.jpg" alt="" />
  19.                 </div>
  20.                 <div class="item">
  21.                     <img src="snimki/6.jpg" alt="" />
  22.                 </div>
  23.                 <div class="item">
  24.                     <img src="snimki/7.jpg" alt="" />
  25.                 </div>
  26.                 <div class="item">
  27.                     <img src="snimki/8.jpg" alt="" />
  28.                 </div>
  29.             </div>
  30.         </div>
  31.        
  32.     </div>

Este codigo esta programado con query para que las imagenes cambian al dar click en unos botones y funciona bien si lo pongo normal en la pagina escrito con html pero si intento poner lo con javascript con innerHTML me sale simplemente una imagen :
Código Javascript:
Ver original
  1. document.getElementById('contenido').innerHTML += '<div id="content"><div class="slider"><div class="sliderContent"><div class="item"><img src="snimki/1.jpg" alt="" /></div><div class="item"><img src="snimki/2.jpg" alt="" /></div><div class="item"><img src="snimki/3.jpg" alt="" /></div><div class="item"><img src="snimki/4.jpg" alt="" /></div><div class="item"><img src="snimki/5.jpg" alt="" /></div><div class="item"><img src="snimki/6.jpg" alt="" /></div> <div class="item"><img src="snimki/7.jpg" alt="" /></div><div class="item"><img src="snimki/8.jpg" alt="" /></div></div></div></div>'
Porque pasa esto???

Gracias :)
  #2 (permalink)  
Antiguo 24/08/2012, 07:11
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Caso raro con innerHTML

Me ha pasado a mí también alguna vez. Esto pasa porque cuando creas un evento en jQuery, se asigna a los elementos HTML que hay actualmente en la página. Esto también pasa si cargas elementos con AJAX, por ejemplo.

Solucionarlo no es fácil, te lo pongo con un ejemplo:

Código Javascript:
Ver original
  1. $(function(){
  2.   var funcion = function(e){
  3.     e.preventDefault();
  4.   };
  5.  
  6.   $('a').bind( 'click', funcion );
  7.  
  8.   $('body').append(
  9.     $(document.createElement('a')).text('Hola mundo!')
  10.   );
  11.  
  12.   $('a').unbind('click');
  13.  
  14.   $('a').bind('click',funcion);
  15.  
  16. });

Un saludo
  #3 (permalink)  
Antiguo 24/08/2012, 08:01
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Caso raro con innerHTML

Cita:
Iniciado por 3nr1c Ver Mensaje
Me ha pasado a mí también alguna vez. Esto pasa porque cuando creas un evento en jQuery, se asigna a los elementos HTML que hay actualmente en la página. Esto también pasa si cargas elementos con AJAX, por ejemplo.

Solucionarlo no es fácil, te lo pongo con un ejemplo:

Código Javascript:
Ver original
  1. $(function(){
  2.   var funcion = function(e){
  3.     e.preventDefault();
  4.   };
  5.  
  6.   $('a').bind( 'click', funcion );
  7.  
  8.   $('body').append(
  9.     $(document.createElement('a')).text('Hola mundo!')
  10.   );
  11.  
  12.   $('a').unbind('click');
  13.  
  14.   $('a').bind('click',funcion);
  15.  
  16. });

Un saludo

Hola gracias por tu respuesta pero yo todabia no se como usar ajax...

Pero si te a pasado a ti como lo solucionaste??

Gracias :)
  #4 (permalink)  
Antiguo 24/08/2012, 08:16
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Caso raro con innerHTML

Olvida el AJAX... puede que te liara un poco.

Lo que he intentado explicarte es que cuando enlazas un evento a un elemento, solo lo enlazas a los elementos actuales, existentes, con el selector que has usado. Y si añades nuevos elementos que coincidan con ese selector, no tendrán el evento enlazado, pues se han creado después y jQuery no lo sabe.

Así que, para solucionarlo, haz lo siguiente:
1.- Supongo que tienes una función algo tal que así:
Código Javascript:
Ver original
  1. $('algo').click(function(){...});
Copia la función y la pones en una variable:
Código Javascript:
Ver original
  1. var fn = function(){
  2.   codigo de la funcion;
  3. };
2.- Dentro de la llamada al evento pones 'fn':
Código Javascript:
Ver original
  1. $('algo').click(fn);
3.- Cuando crees un nuevo elemento, ejecutas esto (cambia el 'algo' por tu selector ):
Código Javascript:
Ver original
  1. $('algo').unbind('click');
  2. $('algo').click(fn);

Debería funcionarte
  #5 (permalink)  
Antiguo 24/08/2012, 08:48
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Caso raro con innerHTML

Gracias por tu respuesta pero esq en el codigo query todo esta en una linea y todo es
Y luego en el codigo html no tiene evento simplemente divs con ids.
El query lo copie de aqui:
[URL="http://a1javascripts.com/?p=703"]http://a1javascripts.com/?p=703[/URL]

Son 3 archivos js. Pero creo que el que me dices es este:

Código Javascript:
Ver original
  1. $(function(){
  2.    
  3.     $('.slider').mobilyslider({
  4.         content: '.sliderContent',
  5.         children: 'div',
  6.         transition: 'fade',
  7.         animationSpeed: 800,
  8.         autoplay: true,
  9.         autoplaySpeed: 3000,
  10.         pauseOnHover: true,
  11.         bullets: false,
  12.         arrows: true,
  13.         arrowsHide: true,
  14.         prev: 'prev',
  15.         next: 'next',
  16.         animationStart: function(){},
  17.         animationComplete: function(){}
  18.     });
  19.    
  20. });
Solo lo he cambiado un poco para que se me adapte a mi pagina.

Muchas gracias por tus respuestas y perdon si me pongo pesado con no saber bien de lo que me hablas

Un saludo :)
  #6 (permalink)  
Antiguo 24/08/2012, 10:37
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Caso raro con innerHTML

Creo que ya sé como puedes solucionar tu problema. Citando el codigo que pusiste en el primer mensaje:

Código Javascript:
Ver original
  1. document.getElementById('contenido').innerHTML += '<div id="content"><div class="slider"><div class="sliderContent"><div class="item"><img src="snimki/1.jpg" alt="" /></div><div class="item"><img src="snimki/2.jpg" alt="" /></div><div class="item"><img src="snimki/3.jpg" alt="" /></div><div class="item"><img src="snimki/4.jpg" alt="" /></div><div class="item"><img src="snimki/5.jpg" alt="" /></div><div class="item"><img src="snimki/6.jpg" alt="" /></div> <div class="item"><img src="snimki/7.jpg" alt="" /></div><div class="item"><img src="snimki/8.jpg" alt="" /></div></div></div></div>'

Cámbialo por:

Código Javascript:
Ver original
  1. $('#contenido').append( '<div id="content"><div class="slider"><div class="sliderContent"><div class="item"><img src="snimki/1.jpg" alt="" /></div><div class="item"><img src="snimki/2.jpg" alt="" /></div><div class="item"><img src="snimki/3.jpg" alt="" /></div><div class="item"><img src="snimki/4.jpg" alt="" /></div><div class="item"><img src="snimki/5.jpg" alt="" /></div><div class="item"><img src="snimki/6.jpg" alt="" /></div> <div class="item"><img src="snimki/7.jpg" alt="" /></div><div class="item"><img src="snimki/8.jpg" alt="" /></div></div></div></div>')

Con esto, estás añadiendo contenido usando jQuery, puede que te funcione...

Y tranquilo, todos hemos sido 'inexpertos' alguna vez
  #7 (permalink)  
Antiguo 24/08/2012, 11:52
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Caso raro con innerHTML

Bueno

Primero no veo el uso indispensable de jQuery para algo tan simple como se esta explicando aqui.

Segundo el uso de bind y/o ubind ya ha sido deprecado por el mismo jQuery por la gran cantdad de errores que este mismo generaba en su caso por favor usar el evento on o el delegate, el live no me acuerdo si ya esta deprecado
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #8 (permalink)  
Antiguo 24/08/2012, 12:15
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Caso raro con innerHTML

Si es indispensable, porque esta usando un plugin que es un slider...
http://a1javascripts.com/?p=703
  #9 (permalink)  
Antiguo 24/08/2012, 12:39
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Caso raro con innerHTML

Cita:
Iniciado por 3nr1c Ver Mensaje
Si es indispensable, porque esta usando un plugin que es un slider...
http://a1javascripts.com/?p=703
3nr1c

El que el haya puesto como name class slider no quiere decir que debemos usar jQuery, ademas el no menciona en ningún lado que esta usando jQuery la cual deberia aclarar en un principio y por lo contrario uno no debe depender de jQuery siempre por mas tranca que sea algo debemos tratar de hacerlo sin necesidad de usar framework y existen tantos ejemplos en la web que pueden ayudar.

Saludos
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #10 (permalink)  
Antiguo 24/08/2012, 16:16
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Caso raro con innerHTML

Gracias por vuestras respuestas :)

Yo si estoy usando query porque no se como hacer lo sin el :(

Al usar esto:

Código Javascript:
Ver original
  1. $('#contenido').append( '<div id="content"><div class="slider"><div class="sliderContent"><div class="item"><img src="snimki/1.jpg" alt="" /></div><div class="item"><img src="snimki/2.jpg" alt="" /></div><div class="item"><img src="snimki/3.jpg" alt="" /></div><div class="item"><img src="snimki/4.jpg" alt="" /></div><div class="item"><img src="snimki/5.jpg" alt="" /></div><div class="item"><img src="snimki/6.jpg" alt="" /></div> <div class="item"><img src="snimki/7.jpg" alt="" /></div><div class="item"><img src="snimki/8.jpg" alt="" /></div></div></div></div>')

Tampoco me funciono :(

Yo muestro esto con un intervalo de esta manera :

Código Javascript:
Ver original
  1. setTimeout(function() {
  2.         $('#contenido').append( '<div id="content"><div class="slider"><div class="sliderContent"><div class="item"><img src="snimki/1.jpg" alt="" /></div><div class="item"><img src="snimki/2.jpg" alt="" /></div><div class="item"><img src="snimki/3.jpg" alt="" /></div><div class="item"><img src="snimki/4.jpg" alt="" /></div><div class="item"><img src="snimki/5.jpg" alt="" /></div><div class="item"><img src="snimki/6.jpg" alt="" /></div> <div class="item"><img src="snimki/7.jpg" alt="" /></div><div class="item"><img src="snimki/8.jpg" alt="" /></div></div></div></div>')},texto.length * 40)

Puede ser que por esto no me funciona??

Gracias :)
  #11 (permalink)  
Antiguo 25/08/2012, 23:57
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Caso raro con innerHTML

Cita:
Iniciado por 3nr1c Ver Mensaje
Creo que ya sé como puedes solucionar tu problema. Citando el codigo que pusiste en el primer mensaje:

Código Javascript:
Ver original
  1. document.getElementById('contenido').innerHTML += '<div id="content"><div class="slider"><div class="sliderContent"><div class="item"><img src="snimki/1.jpg" alt="" /></div><div class="item"><img src="snimki/2.jpg" alt="" /></div><div class="item"><img src="snimki/3.jpg" alt="" /></div><div class="item"><img src="snimki/4.jpg" alt="" /></div><div class="item"><img src="snimki/5.jpg" alt="" /></div><div class="item"><img src="snimki/6.jpg" alt="" /></div> <div class="item"><img src="snimki/7.jpg" alt="" /></div><div class="item"><img src="snimki/8.jpg" alt="" /></div></div></div></div>'

Cámbialo por:

Código Javascript:
Ver original
  1. $('#contenido').append( '<div id="content"><div class="slider"><div class="sliderContent"><div class="item"><img src="snimki/1.jpg" alt="" /></div><div class="item"><img src="snimki/2.jpg" alt="" /></div><div class="item"><img src="snimki/3.jpg" alt="" /></div><div class="item"><img src="snimki/4.jpg" alt="" /></div><div class="item"><img src="snimki/5.jpg" alt="" /></div><div class="item"><img src="snimki/6.jpg" alt="" /></div> <div class="item"><img src="snimki/7.jpg" alt="" /></div><div class="item"><img src="snimki/8.jpg" alt="" /></div></div></div></div>')

Con esto, estás añadiendo contenido usando jQuery, puede que te funcione...

Y tranquilo, todos hemos sido 'inexpertos' alguna vez
Pls sabes otro método porque este no me funciona

Un saludo
  #12 (permalink)  
Antiguo 26/08/2012, 02:00
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Caso raro con innerHTML

Hola, ya lo solucione haciendo una capa oculta y cuando necesitaba que aparesca con innerHTML simplemente muestro la capa.

Gracias por vuestras respuestas :)

Etiquetas: html, imagenenes, innerhtml
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 09:52.