2011-10-25 8 views
0

J'ai une liste de données générées par JSON, récupérées à partir d'une base de données MySQL. Ce que je suis en train de faire maintenant, lorsque l'un des élément de la liste est cliquée, il serait ajouté dans une entrée cachée pour ma forme, mais le problème est que si je fais ceci:jQuery click() ne fonctionne pas avec JSON

$(".buttonZvrst").click(function(){ 
alert("this is a test"); 
}); 

rien ne va arriver. Si je choisis un autre élément qui ne figure pas dans la liste générée par JSON, cela fonctionnera. Cela ne fonctionne-t-il pas, car il est généré plus tard? J'ai besoin d'aide! Voici ma fonction getZvrsti, où JSON est.

function getZvrsti(id) { 
      // Save the request to our requests object 
      request[id] = $.getJSON('test.php?parent='+id, function(data) { 
       var html = ""; 
       $.each(data, function(id, name) { 
        if(name['id'] in izbrani){ 
         if(izbrani[name['id']] == true){ 
          html += '<li id="drugaZvrst" class="izbran"><a class="buttonZvrst" href="#" id="'+name['id']+'">'+name['name']+'</a></li>'; 
         } 
         else{ 
          html += '<li id="drugaZvrst"><a class="buttonZvrst" href="#" id="'+name['id']+'">'+name['name']+'</a></li>'; 
         } 
        } 
        else 
        { 
         izbrani[name['id']] = false 
         html += '<li id="drugaZvrst"><a class="buttonZvrst" href="#" id="'+name['id']+'">'+name['name']+'</a></li>'; 
        } 


       }); 
       // Append the list items and then fade in 
       listUl.append(html); 
       druga.show(400); 
       // We no longer have a request going, so let's delete it 
       request = false; 
      }); 
     } 
+1

Je ne jurent que cela est demandé une ou deux fois par jour. – zzzzBov

Répondre

8

Vous utilisez .click qui lie une fois pour les éléments disponibles au cours de l'exécution du script. Pour les éléments dynamiques dont vous avez besoin .live rechercher .live() sur le jQuery Docs:

.live: Joindre un gestionnaire à l'événement pour tous les éléments qui correspondent au sélecteur de courant, maintenant et dans l'avenir.

+0

Vous devez utiliser delegate() au lieu de live(). C'est la méthode préférée. http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/ – Raghav

1

Vous devez faire .live pour les éléments fixés après la charge initiale du DOM .live permettra la fixation des événements créés après l'initialisation dom .bind ne sera pas.

$(".buttonZvrst").live("click", function(e){ 
    alert("this is a test"); 
}); 
0

Essayant jeter ce code dans votre fonction de rappel à la fin si:

  // Append the list items and then fade in 
      listUl.append(html); 
      druga.show(400); 
      // We no longer have a request going, so let's delete it 
      request = false; 

      $(".buttonZvrst").click(function(){ 
       alert("this is a test"); 
      }); 

     }); 
    } 
Questions connexes