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<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>
<div><a href="#" id="cargarb">Pincha para cargar as
íncronamente la p
ágina B
</a></div>
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 originalvar $j = jQuery.noConflict();
$j(document).ready(function(){
$j("a#cargarb").click( function()
{
$j.ajax(
{
url:'b.php',
success: function(resultado)
{
$j('#destinob').html(resultado);
$j.getScript('js/b.js');
}
});
return false;
}
);
});
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<div id="paginab">Usted ha cargado la p
ágina B as
íncronamente mediante ajax
</div>
Y este es el script que necesita:
Código Javascript
:
Ver originalvar $j = jQuery.noConflict();
$j(document).ready(function(){
window.alert("Acaba de cargar asincronamente el archivo b.js");
$j("#paginab").hover(
function()
{
$j(this).css('color', '#ff6600');
},
function()
{
$j(this).css('color', '#000000');
}
);
});
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