2010-12-16 4 views
1

Je suis nouveau à Jquery et je deviens fou de reupdate dans un code ajax contenant des URL !! Cela fonctionne la première fois, mais le lien ne fonctionne plus après que la réponse ajax réécrit html.JQuery: ne peut pas mettre à jour les liens (je suis nouveau à JQuery)

Veuillez trouver ci-dessous mon code.

d'abord le balisage HTML (Voir)

<head> 
    <script src="http://code.jquery.com/jquery-latest.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function() { 
    $("a[class=unselected_quid], a[class=quid_selected]").click(function(){ 
        var url = $(this).attr("name"); 
        alert(url); 
        $.ajax({ 
         url: "index.php", 
         type: "POST", 
         data: url, 
         dataType: "html", 
         success: function(msg) {  
          $("#result").html(msg); 
         }, 
         error: function(){ 
           alert("error!!!"); 
         } 
       }); 
      }); 
    }); 
</script> 
</head> 

<?php // set url strings in php 
    $url = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=1"; 
    $url2 = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=2"; 
?> 

<body> 
    <div id="result"><br> 
   <a name='<?echo $url?>' href='javascript:void(0)' title='uno' class='selected_quid'>link a</a> <br> 
      <a name='<?echo $url2?>' href='javascript:void(0)' title='due' class='unselected_quid'>link b</a><br> 
    </div> 
</body> 

Puis le PHP (Controller)

public function ajaxLinkResponse(){ 
    $url = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=1"; 
    $url2 = "component=Training&ctrl=JQueryTraining&task=ajaxLinkResponse&data=2"; 

    $code = "<a name='{<?$url?>}' href='javascript:void(0)' title='uno' class='selected_quid'>link a</a> 
    <a name='{<?$url2?>}' href='javascript:void(0)' title='due' class='unselected_quid'>link b</a>"; 

    echo($code); 
} 

Répondre

4

Vous devez utiliser .live() ou .delegate() au lieu de .click() que vous faites de nouveaux éléments DOM dans votre L'appel AJAX et .click() ne prennent pas en charge la création d'éléments DOM.
dire

$("a[class=unselected_quid], a[class=quid_selected]").live('click',function(e){ 
e.preventDefault(); 
// rest of code 

ou

$(aWrapper).delegate('a[class=unselected_quid], a[class=quid_selected]','click',function(e){ 
e.preventDefault(); 
// rest of code 

Vous pouvez demander «Quelle est la différence? bien this devrait aider. Fondamentalement, déléguer est plus rapide, ne plante pas avec de lourdes traversées DOM, et vous pouvez fournir un contexte (c'est une grande fonctionnalité).

+0

@Fred - +1 pour l'info sur le délégué. Je n'ai pas vu ça avant. Y a-t-il des inconvénients à déléguer? – JasCav

+0

@JasCav Pas que je sache, c'est seulement récemment sorti (en 1.4.4 je pense). Avez-vous entendu parler de '.data()'? C'est vraiment pratique. – Fred

+0

C'mon 5 votes? S'il vous plaît? – Fred

Questions connexes