Comunidad de diseño web y desarrollo en internet online

Ajax + Jquery: cargar contenido al pulsar un enlace

Citar            
MensajeEscrito el 08 Oct 2010 12:39 pm
Hola,

estoy intentando crear un script con jquery en el que al pulsar sobre un enlace, importe contenido mediante ajax desde otro archivo. He conseguido que funcione bien (sorprendentemente, porque es de lo primero que hago con jquery), el problema es que el mismo comportamiento se debe aplicar tambien a los datos importados, es decir, los enlaces que se importan también deben ser capaces de importar contenido al pulsar sobre ellos, pero en lugar de eso, recargan la página completa.

Este es el código de la página principal:

Código HTML :

<!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" xml:lang="sp" lang="sp">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
        <script type="text/javascript" src="javascript/jquery-1.4.2.min.js"></script>                
        <script type="text/javascript">    
        // Script to post the form data without reloading the page
        $(document).ready(function() {
            confirm('recargado');
            
            $('.innerForm a').click(function() {    // Apply this function to all a elements inside an element with the class .innerForm
                myForm = '#' + $(this).parents('.innerForm').attr('id');
                myAction = 'envio.php';
                
                $.ajax({
                    type: 'POST',
                    url: myAction,
                    data: $(myForm).find('*').serialize(),
                    success: function(data) {
                        alert(myAction);    
                        $(myForm).find('.result').html(data);
                    }
                })
                
                return false;
            }); 
            
        })
        </script>
    </head>
    
    <body>
                
            <div id="usuarios" class="innerForm">                                
                        
                <a href="?" class="check">CHECK-(cambiar)</a>

                                
                <div class="result">The result will be loaded here</div>
            </div>                                        
      
    </body>
</html>


Y este es el código del archivo desde el que se importan los datos:

Código :

<a href="?" class="check">CHECK-(cambiar)</a>


Podéis decirme por qué el enlace importado no funciona igual que el enlace "nativo"?

Gracias por vuestra ayuda y un saludo.

Por akhasis

75 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Oct 2010 03:36 pm
Se debe a que para cuando se carga el nuevo contenido, la función "ready" de JQuery ya terminó de ejecutarse y por lo tanto los nuevos tags <a> no tendrán asignado el evento (click) que les has puesto al primero.
¿Se entiende lo que digo?...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 11 Oct 2010 08:13 am
Ok, se entiende perfectamente el problema, pero como digo soy muy nuevo en javascript, y no sé cómo solucionar el problema a partir de la información que me has dado.

Gracias por tu atención.

Por akhasis

75 de clabLevel



 

msie8
Citar            
MensajeEscrito el 11 Oct 2010 01:59 pm
Pues cuando termine de cargarse el nuevo contenido debes agregar el controlador de evento al nuevo contenido. Para ello tendrías que separar lo que tienes en "ready" ahora en al menos dos funciones separadas, una que agregue el controlador del evento (lo que está antes de ".click(" en tu código) y otra que haga la petición AJAX (lo que está después).

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 13 Oct 2010 08:15 am
He hecho los cambios indicados y parece que funciona muy bien. Muchas gracias de nuevo por tu atencion

Por akhasis

75 de clabLevel



 

firefox
Citar            
MensajeEscrito el 13 Oct 2010 12:11 pm
De nada :)

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 19 Sep 2011 01:25 am

DriverOp escribió:

Pues cuando termine de cargarse el nuevo contenido debes agregar el controlador de evento al nuevo contenido. Para ello tendrías que separar lo que tienes en "ready" ahora en al menos dos funciones separadas, una que agregue el controlador del evento (lo que está antes de ".click(" en tu código) y otra que haga la petición AJAX (lo que está después).


Podrías poner un ejemplo? creo que me esta pasando lo mismo y no encuentro la soluición....

gracias!

Por destor77

13 de clabLevel



Genero:Masculino  

Gálvez,Santa Fe, Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.