Ir al contenido principal

Problemas que pueden surgir al recargar DIV contenedor.

En uno de mis primeros post explicaba lo sencillo que es, a través de jQuery, recargar un DIV contenedor sin necesidad de recargar toda la página. Durante este tiempo he visto que pueden surgir un par de problemas dependiendo del contenido de dicho DIV. Si el contenido que queremos recargar es para mostrar la información que tenemos en un menú principal... bueno me explico mejor con la imagen de la derecha. Como podéis ver esta sería una página principal sencilla que consta de una cabecera, con el menú principal arriba que sería siempre fija. Una zona de enlaces a la derecha, también fija y un pié de página también fijo. El único DIV que se recargaría sería el contenedor del medio el cual mostraría la información que queramos ver, al pinchar en los enlaces del menú principal. Espero haberme explicado bien. Bueno, uno de los problemas que nos podemos encontrar es el siguiente: lo normal sería que en el menú tuviesemos un enlace que nos vuelva a llevar a la página principal (un botón llamado INICIO). Si mantenemos el código de recarga tal cual, nos recargaría TODA la página dentro del contenedor y eso no lo queremos. La solución es sencilla con un simple "if".

    if (href!="index.html"){} /* Lo cual significa: si el valor de href es distinto de                                                   index.html entonces ejecutar el código que hay entre{} 


  El otro problema sería más peculiar: si en el contenido (aparte de en el menú), tenemos enlaces que se comportan de la misma manera (recargando sólo el div contenedor), y en la información recargada  tenemos otros enlaces que hacen lo mismo, es decir, si incluimos enlaces a contenido que queremos se recargue en ese mismo div contenedor, entonces el código no funcionará. ¿Porqué?, pues porque el código sólo hace referencia a las etiquetas que se encuentran en la página donde ejecutamos el código y no a las que están por venir, aunque tengan una clase o un id con el mismo nombre. ¿Solución? la hay y sencilla (necesario tener actualizado jQuery en la última versión mejor). La mejor solución sería usar la función ".on()" la cual extiende el evento realizado a las etiquetas que se vayan a cargar. La sintaxis sería así:

   $("#content").on('click','.read_r a', function() {}

  Y su significado sería: "busco dentro del id "#content" todos los "a" que tengan la clase ".read_r" y cuando se haga click en uno de ellos ejecutamos la función. Según dicen es mucho mejor que usar .delegate o .live.

  El código completo nos quedaría así:

<script type="text/javascript">
$(document).ready(function(){
    $("#content").on('click','.read_r a', function() {
        var href = $(this).attr("href");
        if (href!="index.html") {
            $(this).attr({ href: "#"});
            $("#content").css("display","none");
             $("#cargando").css("display", "inline");
            $("#content").load(href).fadeIn(700);
             $("#cargando").css("display", "none");
        }
    })
})
</script> 

  El siguiente problema que surge, en un tipo de página como la que estoy describiendo, es que si el buscador nos muestra los enlaces que recargamos dentro del div contenedor entonces, al pinchar sobre ellos, veremos una página sin formato, porque, como ya dije en el post actualizar div contenedor, el código que recargamos no tiene las etiquetas <html>, <head>,<body>. La solución en código para redirigir a otra página.

  Otros problemas que pueden surgir serían de visualización dependiendo del navegador usado.
   Yo he tenido el siguiente problema con el chrome: no se cargaba el contenido al pinchar los enlaces. Pero esto no ocurre cuando subes la página al servidor.

   Otro problema lo podéis tener con el IE en versiones iguales o inferiores a la 8. Si el contenido a recargar es código HTML, como es este caso, hay que tener cuidado con las etiquetas. Si tenemos alguna mal cerrada no se cargará el contenido.

Comentarios

Entradas populares de este blog

Leer un archivo XML con jQuery y javascript y modificar un HTML con su contenido

   Una manera muy interesante y fácil de modificar los textos de tu página web. Si, por ejemplo, tenemos una página donde cambiamos a menudo unas noticias que tenemos en el margen derecho, podríamos tener un código HTML como este:    <!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"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Manejar archivo XML</title> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script src="leerxml.js"></script> <link rel="stylesheet" href="estilos.css"> </head> <body> <h1>Titulo de la página</h1> <div id="derecha"> <div class="noticias"> <div class="prim

Recargar div con efecto de aparición suave (Fade In) en jQuery

  En este post continúo con el código que describí en el segundo post sobre cómo refrescar un div sin necesidad de refrescar toda la página, pero añadiéndole unas lineas para este se aparezca de forma suave. La página de ejemplo es http://www.talleresguadamia.com y el código es el que sigue: <script type="text/javascript"> $(document).ready(function(){    $("#contenido a").each(function(){       var href = $(this).attr("href");       $(this).attr({ href: "#"});       $(this).click(function(event){                  $("#contenido").css("display","none");          $("#contenido").load(href).fadeIn(700);        });    }); });; </script>   Podéis ver lo fácil que es. Hemos agregado sólo dos cosas:   - La linea  "$('#contenido').css('display','none')", que lo único que hace es cambiar la propiedad css "display" del div "#contenido&q

Código jQuery para ver una imagen al pasar el ratón sobre un enlace.

   Voy a explicar un código en jQuery , para que, al pasar el puntero del mouse sobre un enlace o, en este caso, sobre un texto cualquiera (sin necesidad de ser un enlace), se nos muestre una imagen cerca del enlace y que esta desaparezca al retirar el puntero del mouse (sin necesidad de hacer click sobre él). Podéis pensar que me estoy repitiendo con un anterior post. Casi que si. Pero la diferencia es que, en este caso, no sabemos donde estará situada la imagen. Es decir que, dependiendo de la situación de la pantalla donde esté el enlace o texto, allí se mostrará la imagen.    Vamos al grano. Primero el código en HTML:       <span class="enlace" title="hyneria.png">Hyneria</span>    Podéis ver que, en este caso, no se trata de un enlace. Le pongo el nombre de 'enlace' a la clase porque en el CSS le doy apariencia de enlace. Aquí lo importante es 'title' el cual contiene el nombre de la imagen que queremos mostrar (pod