hacker


Ingresar con nombre de usuario, contraseña y duración de la sesión
| Portal Hacker | Editorial | Descargas | Ezine |
Inicio Ayuda Ingresar Registrarse
19 de Noviembre de 2008, 12:06:46
Noticias: Caracteres maximos de las firmas
Para ver este enlace Registrate o Inicia Sesion
> leer

+  Foros pOrtal Hacker
|-+  Programacion
| |-+  Desarrollo Web (Moderadores: DarkAngel, carlmycol, shevchenko)
| | |-+  Múltiples triggers en onLoad con Ajax y Prototype
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Múltiples triggers en onLoad con Ajax y Prototype  (Leído 83 veces)
shevchenko
Moderador
*****
Desconectado Desconectado

Mensajes: 926


Lo importante no es ganar sino hacer perder alotro


Ver Perfil WWW
« : 08 de Julio de 2008, 09:56:58 »

Cuando trabajamos con ajax logramos efectos bastante buenos para nuestras páginas, pero podemos perder compatibilidad con motores de búsqueda o usabilidad con los usuarios que tienen desactivado javascript.

Una de las formas de solucionar estos inconvenientes es transformar los links ordinarios en links para ajax por medio del mismo javascript. Para eso utilizaremos el atributo rel para indicar que enlaces son los que queremos que se modifiquen:

Código :

    <a href="tudestino.html" rel="ajax" >Click Aqui[/url]

Para poder transformar este link en un enlace asíncrono necesitamos utilizar una función de javascript. Aca en cristalab hay algunos tutoriales que hacen efectos similares, pero en este caso utilizaremos prototype para la función:

Código :

    function cambiaMisLinks()
    {
         var links = $$('a[rel=ajax]'); //Busca los lnks que tenga el atributo rel="ajax"
         for ( var i = 0; i < links.size(); i++ )
         {
              links.observe( 'click', abrirLink ); //Observa el evento click del link y llama a abrirLink
         }
    }

Ahora definimos la función abrirLink() que se encargará de realizar el proceso de abrir las páginas por medio de ajax.

Código :

    function abrirLink( event )
    {
         var div = $( 'contenido' ); // Equivale a document.getEl ementById( 'contenido' )
         var link = event.element(); // Al usar un observador no podemos usar this
                                              // De esta manera obtenemos el elemento

         new Ajax.Updater
         (
               div, // Es el div que se actualizara asíncronamente
               link.href, // La url del link
               {
                   parameters: { ajax : true }  //Un parámetro para distinguir que se cargo por ajax
               }
         )

         event.stop(); // De esta manera evitamos que el link nos lleve a otra pagina
    }

Y lo único que nos falta es ejecutar la función al cargar la página. Eso lo hacemos con:

Código :

    Event.observe( window, 'load', cambiaMisLinks );

¿Pero que pasará si con los nuevos links que vengan dentro de la sección que llamamos con ajax? Como la función solo se ejecuta al cargar la página estos links ya no se cambiarán, así que llamamos la función otra vez utilizando onComplete en el Ajax.Updater

Código :

    new Ajax.Updater
         (
               div, // Es el div que se actualizara asíncronamente
               link.href, // La url del link
               {
                   onComplete: function()
                   {
                         cambiaMisLinks(); // Llamamos la función al terminar de cargar la sección con ajax
                   }
                   parameters: { ajax : true }  //Un parámetro para distinguir que se cargo por ajax
               }
         )

De esta manera garantizamos que la función se ejecute al cargar una nueva sección con ajax. Pero si queremos que se ejecuten varios script al cargar la sección, y queremos garantizar la compatibilidad del código sin tener que regresar y agregar nuevas funciones tendremos que hacer algunos ajustes adicionales.

Primero creamos un evento personalizado, y garantizamos que este evento "ocurra" al cargar nuestra página principal.

Código :

    function nuevoEvento()
    {
          $( 'principal' ).fire('site:inicio''); // nuestro div principal "dispara" el evento personalizado
    }

    Event.observe( window, 'load', nuevoEvento );

Ahora modificamos el evento con el que llamamos a nuestra función para que sea nuestro evento personalizado en lugar de el evento onload de la página

Código :

    Event.observe( window, 'site:inicio', cambiarMisLink s );

y finalmente modificamos nuestro Ajax.Updater

Código :

    new Ajax.Updater
         (
               div, // Es el div que se actualizara asíncronamente
               link.href, // La url del link
               {
                   onComplete: function()
                   {
                        $('principal').fire( 'site:inicio' ); //Dispara evento personalizado
                   }
                   parameters: { ajax : true }  //Un parametro para distinguir que se cargo por ajax
               }
         )

Ahora cuando queramos que una función de javascript se ejecute al cargar nuestra página inicial y cada vez que carguemos una sección mediante ajax solamente la agregamos a nuestro evento personalizado:

Código :

    Event.observe( window, 'site:inicio', nuevaFuncion );

    //o también

    Event.observe( window, 'site:inicio', function(){
           // Tu código aqui
    } );

Autor: Odin


En línea



Para ver este enlace Registrate o Inicia Sesion


Para ver este enlace Registrate o Inicia Sesion
Aprende C++ ( 29 Videotutoriale s )
   
Para ver este enlace Registrate o Inicia Sesion
Consejos Web
 
Para ver este enlace Registrate o Inicia Sesion
F.A.Q-Temas Importantes sobre PHP


Para ver este enlace Registrate o Inicia Sesion
FAQ - Temas Importantes sobre ASP
   
Para ver este enlace Registrate o Inicia Sesion
Lista de Script de ASP

Páginas: [1] Ir Arriba Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC hacker

Juegos gratis - Articulos PHP - Juegos - Trucos - Letras - Juegos - Juegos Online