Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Recargar archivos JS

Estas en el tema de Recargar archivos JS en el foro de Jquery en Foros del Web. Buenos días, Estoy generando una pagina html, y mediante una funcion javascript llamo a un archivo php para poner contenido en un div concreto del ...
  #1 (permalink)  
Antiguo 10/04/2014, 04:02
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 11 años, 11 meses
Puntos: 0
Recargar archivos JS

Buenos días,

Estoy generando una pagina html, y mediante una funcion javascript llamo a un archivo php para poner contenido en un div concreto del archivo HTML (iniciar), así pongo contenido nuevo sin recargar la página.

El problema es que necesito que se ejecuten unos archivos js que inicialmente se ejecutan, pero al mostrar el nuevo contenido, estos no se ejecutan y por lo tanto el nuevo contenido no funciona.

¿Alguna solución?

Muchas gracias por avanzado.
  #2 (permalink)  
Antiguo 10/04/2014, 07:06
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 3 meses
Puntos: 81
Respuesta: Recargar archivos JS

Pon algo de código para que nos aclares un poco la cosa.
  #3 (permalink)  
Antiguo 10/04/2014, 07:30
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Recargar archivos JS

Puedes utilizar funciones y las invocas cuando te convenga...
  #4 (permalink)  
Antiguo 10/04/2014, 07:39
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Recargar archivos JS

Phperos, lo que me comentas de ejecutar la funcion lo he probado pero no he tenido suerte.

Lo que he estado investigando es que el pluguin en un inicio funciona, pero una vez se ha ejecutado la funcion para cambiar el contenido del div, deja de funcionar.
Dejo el codigo (ya que lo he sacado de una web de acceso gratuito) que se deberia recargar cada vez que cambio el contenido del div.

Cita:
<script src="libs/jquery.imagesloaded.js"></script>
<script src="jquery.wookmark.js"></script>
<script type="text/javascript">
(function ($){
$('#tiles').imagesLoaded(function() {
// Prepare layout options.
var options = {
autoResize: true, // This will auto-update the layout when the browser window is resized.
container: $('#todo'), // Optional, used for some extra CSS styling
offset: 20, // Optional, the distance between grid items
itemWidth:280, // Optional, the width of a grid item
fillEmptySpace: true // Optional, fill the bottom of each column with widths of flexible height
};

// Get a reference to your grid items.
var handler = $('#tiles li'),
filters = $('#filters li');

// Call the layout function.
handler.wookmark(options);

/**
* When a filter is clicked, toggle it's active state and refresh.
*/
function onClickFilter(e) {
var $item = $(e.currentTarget),
activeFilters = [],
filterType = $item.data('filter');

if (filterType === 'all') {
filters.removeClass('active');
} else {
$item.toggleClass('active');

// Collect active filter strings
filters.filter('.active').each(function() {
activeFilters.push($(this).data('filter'));
});
}

handler.wookmarkInstance.filter(activeFilters, 'or');
}

// Capture filter click events.
$('#filters').on('click.wookmark-filter', 'li', onClickFilter);
});
})(jQuery);
</script>
  #5 (permalink)  
Antiguo 10/04/2014, 07:46
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Recargar archivos JS

Buenas,

Intentaré ayudarte un poco...

¿Ves esta linea?
Código Javascript:
Ver original
  1. $('#filters').on('click.wookmark-filter', 'li', onClickFilter);

Ahí le estás diciendo que el elemento #filters este a la escucha del evento 'click.wookmark-filter' y le pase ese li y ejecute onClickFilter.

Si te lees la doc de .on ( https://api.jquery.com/on/ ) verás que existe una parte q se llama "delegate", que será el problema que tienes.

Imagino que al recargar el div, "pierdes" ese elemento #filters, para añadir otro... ¿q es lo q pasa? Q pierdes los eventos "attached" (añadidos? embebidos? a los q estaba a la escucha? ) en ese elemento.. y su no vuelves a ejecutar eso, no funciona.

Tienes dos posibles soluciones...

1)
Volver a ejecutar $('#filters').on('click.wookmark-filter', 'li', onClickFilter); después de cargar el div.

2)
Hacer el attach al body

No sé si me he explicado, si has entendido algo o no
__________________
>> Eleazan's Source
>> @Eleazan
  #6 (permalink)  
Antiguo 10/04/2014, 07:49
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Recargar archivos JS

Entiendo lo que me comentas, cosa que te agradezco mucho, pero no se como ponerlo...

Lo ideal es que se ejecute una vez carga todo el contenido del div.
  #7 (permalink)  
Antiguo 10/04/2014, 08:11
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Recargar archivos JS

Perdón, contesté muy rapidito....


Prueba con este código:
Código Javascript:
Ver original
  1. (function ($){
  2.  
  3. // Prepare layout options.
  4. var options = {
  5. autoResize: true, // This will auto-update the layout when the browser window is resized.
  6. container: $('#todo'), // Optional, used for some extra CSS styling
  7. offset: 20, // Optional, the distance between grid items
  8. itemWidth:280, // Optional, the width of a grid item
  9. fillEmptySpace: true // Optional, fill the bottom of each column with widths of flexible height
  10. };
  11.  
  12. // Get a reference to your grid items.
  13. var handler = $('#tiles li'),
  14. filters = $('#filters li');
  15.  
  16.  
  17. $('#tiles').imagesLoaded(function() {
  18.  
  19. // Call the layout function.
  20. handler.wookmark(options);
  21.  
  22. /**
  23. * When a filter is clicked, toggle it's active state and refresh.
  24. */
  25. function onClickFilter(e) {
  26. var $item = $(e.currentTarget),
  27. activeFilters = [],
  28. filterType = $item.data('filter');
  29.  
  30. if (filterType === 'all') {
  31. filters.removeClass('active');
  32. } else {
  33. $item.toggleClass('active');
  34.  
  35. // Collect active filter strings
  36. filters.filter('.active').each(function() {
  37. activeFilters.push($(this).data('filter'));
  38. });
  39. }
  40.  
  41. handler.wookmarkInstance.filter(activeFilters, 'or');
  42. }
  43.  
  44. // Capture filter click events.
  45. $('#filters').on('click.wookmark-filter', 'li', onClickFilter);
  46. });
  47. })(jQuery);

Así, las variables "options", "handlers" y "filters" serán globales (accesibles para cualquier trozo de código de js).

Una vez comprobado que así funciona, al recargar tu div, supongo que usarás alguna función en plan $.ajax, o cosas.... puedes volver a ejecutar esta linea:
Código Javascript:
Ver original
  1. handler.wookmark(options);
__________________
>> Eleazan's Source
>> @Eleazan
  #8 (permalink)  
Antiguo 10/04/2014, 08:25
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Recargar archivos JS

El código que me has pasado funciona, pero cuando recargo el div deja de funcionar.

Tengo esto al final del div:

Código:
<script>
$(document).ready(function(){
   //código a ejecutar cuando el DOM está listo para recibir instrucciones.
   (function ($){
    handler.wookmark(options);
	})(jQuery);
});

</script>
Es correcto, o me estoy equivocando de sitio?

Agradezco mucho tu ayuda!
  #9 (permalink)  
Antiguo 10/04/2014, 08:35
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Recargar archivos JS

Digo yo...

Usarás una funcion js para recargar el div, no? xD

Mete la línea despues de cambiar el html ahí
__________________
>> Eleazan's Source
>> @Eleazan
  #10 (permalink)  
Antiguo 10/04/2014, 08:39
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Recargar archivos JS

Si si, te la pongo a continuación:

<script>
function showUser(str)

{

if (str=="")
{
document.getElementById('todo').innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
var xmlhttp = new XMLHttpRequest();
}
else
{// code for IE6, IE5
var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById('todo').innerHTML=xmlhttp. responseText;
}
}

xmlhttp.open("GET","url"+str,true);
xmlhttp.send();

}
</script>

Entiendo pues, que debería poner una nueva sentencia para ejecutar la función " handler.wookmark(options);" no?
  #11 (permalink)  
Antiguo 10/04/2014, 08:52
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Recargar archivos JS

Perdona si te estoy liando, pero estoy un poco perdido com el tema, y no domino demasiado jQuery
  #12 (permalink)  
Antiguo 10/04/2014, 08:53
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Recargar archivos JS

Justo después de "document.getElementById('todo').innerHTML=xmlhttp . responseText;"

Por ejemplo! :P

PD: Usando jQuery, es más sencillo usar esto:

Código Javascript:
Ver original
  1. $.get(url, datos, function(data){
  2.    $("#todo").html(data);
  3. });

Ahí tendrías ese codigo entero xD
__________________
>> Eleazan's Source
>> @Eleazan
  #13 (permalink)  
Antiguo 10/04/2014, 09:07
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Recargar archivos JS

No me funciona :(

Me pone esto: "ReferenceError: handler is not defined"
  #14 (permalink)  
Antiguo 10/04/2014, 09:22
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Recargar archivos JS

¿Y si cambias handler por $('#tiles li') ? xD
__________________
>> Eleazan's Source
>> @Eleazan
  #15 (permalink)  
Antiguo 10/04/2014, 10:04
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Recargar archivos JS

Mañana lo pruebo y te digo :)
  #16 (permalink)  
Antiguo 11/04/2014, 03:15
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Recargar archivos JS

Hola Eleazan,

Finalmente ya he encontrado la solución! gracias a lo que me comentabas, finalmente he optado para poner toda la función después de "document.getElementById('todo').innerHTML=xml http . responseText;", ya que lo que me comentabas no funcionaba del todo bien.

Muchas gracias por tu ayuda!

Un saludo!

Etiquetas: funcion, html, javascript, js, php
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:14.