Ver Mensaje Individual
  #10 (permalink)  
Antiguo 07/05/2010, 12:42
ukix
 
Fecha de Ingreso: febrero-2004
Mensajes: 31
Antigüedad: 20 años, 2 meses
Puntos: 1
Respuesta: PROBLEMA JQUERY LOAD--no carga script de la segunda pagina

Yo también he tenido este mismo problema.
Al cargar asíncronamente una página B, que tenía que ejecutar funciones en javascript estas no funcionaban correctamente.

Si añadía el código javascript sobre la página B funcionaba en Firefox, pero no así en Explorer.

Despues de estar horas buscando una solución he encontrado algo que parece que funciona y tiene lógica.. estos son los códigos:

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  4. <title>Cargador de B</title>
  5. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>
  6. <script type="text/javascript" src="js/a.js"></script>
  7. </head>
  8.  
  9. <div><a href="#" id="cargarb">Pincha para cargar as&iacute;ncronamente la  p&aacute;gina B</a></div>
  10. <div id="destinob"></div>
  11. </body>
  12. </html>

Este código nos carga la pagina b.php sobre la capa "destinob"
La función que realiza esta carga está en "a.js"

Código Javascript:
Ver original
  1. var $j = jQuery.noConflict();
  2. $j(document).ready(function(){
  3.  
  4.     $j("a#cargarb").click( function()
  5.                             {
  6.                                 $j.ajax(
  7.                                     {
  8.                                         url:'b.php',
  9.                                         success: function(resultado)
  10.                                                     {
  11.                                                         $j('#destinob').html(resultado);
  12.                                                         $j.getScript('js/b.js');
  13.                                                     }
  14.                                     });
  15.  
  16.                                
  17.                                 return false;
  18.                             }
  19.                         );
  20.  
  21.  
  22. });

Lo primero que hace al clickar en el enlace es cargar la página correspondiente, "b.php". Esto lo hago con $.ajax, para así controlar cuando se ha efectuaco la carga.. mediante success hago visible la capa y justo despues cargo el script que necesita la página B para funcionar.
Si cargo el script "b.js" antes que la página que estoy cargando, b.php, el script no funciona en b.php. Los scripts deben cargarse una vez están listas las páginas cargadas.


Código HTML:
Ver original
  1. <div id="paginab">Usted ha cargado  la p&aacute;gina B as&iacute;ncronamente mediante ajax</div>

Y este es el script que necesita:

Código Javascript:
Ver original
  1. var $j = jQuery.noConflict();
  2. $j(document).ready(function(){
  3.     window.alert("Acaba de cargar asincronamente el archivo b.js");
  4.     $j("#paginab").hover(
  5.                         function()
  6.                             {
  7.                                 $j(this).css('color', '#ff6600');
  8.                             },
  9.                         function()
  10.                             {
  11.                                 $j(this).css('color', '#000000');
  12.                             }
  13.                         );
  14.  
  15. });

El código es muy sencillo, es solo a modo de ejemplo y he comprobado que funciona en todos los navegadores que he probado, Firefox, Explorer 7, Chorme y Safari.

Había probado otras cosas que he encontrado en la Web, pero no llegaban a funcionar en todos los navegadores por igual.

Había probado el escribir directamente el script en la página a cargar B, en FIrefox esto funcionaba, pero no en explorer, que no ejecutaba el script.

Creo que el detalle está en cargar los scripts una vez que la página que los va a usar está cargada, no antes.

Cualquier observación sobre este problema y a esta solución será bien recibida

Última edición por ukix; 07/05/2010 a las 13:02