<div id="left_content">
<div class="title_box">PRODUCTOS</div><hr />
<script src="ajax.js" type="text/javascript"></script>
<a href="voladores/principal.html" rel="ajax-center_content"><div class="title_box">Voladores</div></a>
<script src="ajax.js" type="text/javascript"></script>
<a href="herbivoros/principal.html" rel="ajax-center_content"><div class="title_box">Herbívoros</div></a>
<script src="ajax.js" type="text/javascript"></script>
<a href="carnivoros/principal.html" rel="ajax-center_content"><div class="title_box">Carnívoros</div></a>
</div>
<body>
<div id="center_content">
<div class="center_title_bar">Herbívoros</div>
<div class="prod_box">
<div class="center_prod_box">
<div class="product_title">
<script src="ajax.js" type="text/javascript"></script>
<a href="herbivoros/details_triceratops_adult.html" rel="ajax-center_content">Triceratops</a></div>
<div class="product_img"><script src="ajax.js" type="text/javascript"></script>
<a href="herbivoros/details_triceratops_adult.html" rel="ajax-center_content"><img src="herbivoros/mid_pic_triceratops_adulto.jpg" alt="" title="" border="0" /></a></div>
<div class="prod_price"><span class="reduce">500€</span> <span class="price">400€</span></div>
</div>
<div class="prod_details_tab">
<a href="buy.html" class="prod_buy">Añadir a carrito</a>
<script src="ajax.js" type="text/javascript"></script>
<a href="herbivoros/details_triceratops_adult.html" class="prod_details" rel="ajax-center_content">Detalles</a>
</div>
</div>
<div class="prod_box">
<div class="center_prod_box">
<div class="product_title">
<script src="ajax.js" type="text/javascript"></script>
<a href="herbivoros/details_piecito.html" rel="ajax-center_content">Piecito</a></div>
<div class="product_img">
<script src="ajax.js" type="text/javascript"></script>
<a href="herbivoros/details_piecito.html" rel="ajax-center_content"><img src="herbivoros/mid_pic_piecito.jpg" alt="" title="" border="0" /></a></div>
<div class="prod_price"><span class="reduce">500€</span> <span class="price">425€</span></div>
</div>
<div class="prod_details_tab">
<a href="buy.html" class="prod_buy">Añadir a carrito</a>
<script src="ajax.js" type="text/javascript"></script>
<a href="herbivoros/details_piecito.html" class="prod_details" rel="ajax-center_content">Detalles</a>
</div>
</div>
<div class="center_title_bar"></div>
</div>
</div>
</body>
<a href="voladores/principal.html" rel="ajax-center_content" class="title_box">Voladores</a>
if (navigator.userAgent.search(/msie/i) > 0) {
DatosIniciales();
} else {
document.addEventListener("DOMContentLoaded", DatosIniciales, false);
}
function DatosIniciales() {
var ListaVinculos = document.links;
var TotalVinculos = ListaVinculos.length;
var SubListaVinculos = new Array(); // Subgrupo de los vínculos que nos interesan
var z = 0;
for (n = 0; n < TotalVinculos; n++) {
if ((ListaVinculos[n].attributes.rel != null) && (ListaVinculos[n].attributes.rel.value.search(/ajax/i)>= 0) ) {
SubListaVinculos[z] = ListaVinculos[n];
z++;
}
}
AsignarEscuchas(SubListaVinculos);
}
function AsignarEscuchas(x) {
var SubListaVinculos = x;
var TotalSubListaVinculos = SubListaVinculos.length;
for (n = 0; n < TotalSubListaVinculos; n++) {
if (navigator.userAgent.search(/msie/i) >= 0) {
SubListaVinculos[n].attachEvent("onclick", Ajax); // Explorer
} else {
SubListaVinculos[n].addEventListener("click", Ajax, false); // DOM
}
}
}
function Ajax(evento) {
if (this.getAttribute) {
var pagina = this.getAttribute('href');
var propiedades = this.getAttribute('rel').split("-");
evento.preventDefault();
} else {
var uri = evento.srcElement.getAttribute('href');
var subpagina = evento.srcElement.getAttribute('href').split("/");
var pagina = subpagina[subpagina.length-1];
var propiedades = evento.srcElement.getAttribute('rel').split("-");
}
if (propiedades[0] == "ajax") {
loadurl(pagina, propiedades[1]);
return false;
}
}
function loadurl(url, id){
var pagecnx = createXMLHttpRequest();
pagecnx.onreadystatechange=function()
{
if (pagecnx.readyState == 4 && (pagecnx.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(id).innerHTML=pagecnx.responseText;
}
pagecnx.open('GET', url, true)
pagecnx.send(null)
}
function createXMLHttpRequest() {
var xmlHttp=null;
if (window.ActiveXObject)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest)
xmlHttp = new XMLHttpRequest();
return xmlHttp;
}
amuchamu escribió:No soy un experto en el tema pero por lo que veo, el js examina todos los enlaces y hace que llamen a una función al hacerles click, que carga el contenido de la web dentro del div cuya id se corresponda con la segunda parte del atributo rel de cada enlace, por ejemplo rel="ajax-center_content" hará que ese enlace se cargue en el div de id center_content. Bien, ahí no veo ningún problema.
Por lo que entiendo de tu primer mensaje, cargas la página y al hacer click en cualquier sección, funciona bien, pero cuando haces click en los productos de esa sección, funciona mal. Es decir, funciona bien con todos los enlaces que aparecen en primer término, pero no con los enlaces que se cargan después en center_content. Creo que el problema se debe a la forma en que asignas los eventos click a los enlaces, se hacen al cargar la página pero no en las páginas que se cargan asíncronamente. Es decir, tienes que añadir el evento click a las páginas que carga ajax. No sé si me he explicado![]()
Bien, cómo hacerlo es lo que no sé. Podrías modificar el js para que, al final de la función loadurl, vuelva a llamar a la función DatosIniciales(), o podrías hacer una función que realice la misma tarea únicamente sobre los enlaces que estén dentro del div cuya id es center_content. No sé si se pueden asignar varios eventos (on)click al mismo elemento (en cuyo caso te podría dar problemas) o si un evento click sustituye al anterior asignado, prueba a ver, imagino que sustituirá. Otra opción sería añadir manualmente onClick, aunque dificultaría el mantenimiento de la página.
No sé si te he aclarado o solucionado algoHace mucho que no toco esto.
if (navigator.userAgent.search(/msie/i) > 0) {
DatosIniciales(); //Carga la función DatosIniciales en IE
} else {
document.addEventListener("DOMContentLoaded", DatosIniciales, false); //Carga la función DatosIniciales, cuando el documento HTML está completo (mozilla/webkit)
}
function DatosIniciales() {
var ListaVinculos = document.links; //La variable ListaVinculos, almacena todos los enlaces del documento
var TotalVinculos = ListaVinculos.length; //Almacena en un número entero la cantidad de enlaces que hay
var SubListaVinculos = new Array(); // Subgrupo de los vínculos que nos interesan
var z = 0;
for (n = 0; n < TotalVinculos; n++) {
if ((ListaVinculos[n].attributes.rel != null) && (ListaVinculos[n].attributes.rel.value.search(/ajax/i)>= 0) ) {
SubListaVinculos[z] = ListaVinculos[n]; //En el array SubListaVinculos, almacena todos los vinculos, cuyo atributo reel no sea nulo y …¿?
z++;
}
}
AsignarEscuchas(SubListaVinculos);
}
function AsignarEscuchas(x) { //Según entiendo, esta función llama a la función Ajax cuando se da clic en un link con los atributos deseados.
var SubListaVinculos = x;
var TotalSubListaVinculos = SubListaVinculos.length;
for (n = 0; n < TotalSubListaVinculos; n++) {
if (navigator.userAgent.search(/msie/i) >= 0) {
SubListaVinculos[n].attachEvent("onclick", Ajax); // Explorer
} else {
SubListaVinculos[n].addEventListener("click", Ajax, false); // DOM
}
}
}
function Ajax(evento) { //El evento es click según entiendo
if (this.getAttribute) { //El this debe de ser el enlace al que se ha dado el click
var pagina = this.getAttribute('href');
var propiedades = this.getAttribute('rel').split("-"); //¿La variable propiedades obtiene el atributo "rel" del enlace que fue clickeado, pero cambia el guión por coma?
evento.preventDefault();
} else {
var uri = evento.srcElement.getAttribute('href');
var subpagina = evento.srcElement.getAttribute('href').split("/");
var pagina = subpagina[subpagina.length-1];
var propiedades = evento.srcElement.getAttribute('rel').split("-");
}
if (propiedades[0] == "ajax") {
loadurl(pagina, propiedades[1]);
return false;
}
}
function loadurl(url, id){
var pagecnx = createXMLHttpRequest();
pagecnx.onreadystatechange=function()
{
if (pagecnx.readyState == 4 && (pagecnx.status==200 || window.location.href.indexOf("http")==-1))
document.getElementById(id).innerHTML=pagecnx.responseText;
}
pagecnx.open('GET', url, true)
pagecnx.send(null)
}
function createXMLHttpRequest() {
var xmlHttp=null;
if (window.ActiveXObject)
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
else if (window.XMLHttpRequest)
xmlHttp = new XMLHttpRequest();
return xmlHttp;
}