2010-10-24 17 views
0

J'essaie de faire un "Plus" après 10 messages sur les sujets d'actualité.jQuery: problème avec les fonctions du texte ajouté

Pour ces sujets d'actualité, il y a quelques fonctions, vous pouvez cliquer sur commentaire, puis apparaît et vous commentez sans passer par une autre page (appel AJAX) et d'autres comme ceci. Cela fonctionne bien sur les 10 premiers messages.

Maintenant, lorsque vous cliquez sur Plus en bas de ces 10 sujets, vous en obtiendrez 10 autres. L'appel Ajax est utilisé ici, et il est ajouté après les 10 premiers. Cela fonctionne bien aussi.

Mais ce qui ne fonctionne pas (mon problème est que ceux sur les fonctions de clic j'ai:

$('.reply').click(function() { 
    $('#replyWall'+$(this).attr('data-id')).toggle(); 
    document.getElementById('replyMsg'+$(this).attr('data-id')).focus(); 
}); 

$('.writeSComment').click(function() { 
    $(this).hide(); 
    $('#replyToSComment'+$(this).attr('data-id')).toggle(); 
    document.getElementById('commentStatus'+$(this).attr('data-id')).focus(); 
}); 

ne fonctionne pas est peut-être parce que le joint vient après que le site a été chargé, parce que vous en premier. cliquez sur "Plus", donc il ne pouvait pas trouver avec cet id pour cliquer sur cet événement

Mais sur ce ajouté, il y a ces id, et tout, donc est-il possible d'obtenir ces fonctions travailler avec les choses ajoutées, ou comment dois-je le faire?

$('.more').live("click",function() { 
    var ID = $(this).attr("id"); 
    if(ID) { 
     $("#more"+ID).html('<img src="moreajax.gif" />'); 
     $.ajax({ 
      type: "POST", 
      url:  "misc/moreactivities.php", 
      data: "lastmsg="+ ID, 
      cache: false, 
      success: function(html) { 
       $("#profileWall").append(html); 
       $("#more"+ID).remove(); 
      } 
     }); 
    } 
}); 
+2

Il n'y a pas de code ici qui ne appending tout. Pourquoi mixez-vous jQuery avec getElementById? –

+0

Désolé question mise à jour. – Johnson

Répondre

1

Lorsque vous liez un événement à un ensemble d'éléments sélectionnés, vous ne les éléments qui affectent existent actuellement dans le DOM. C'est ce que vous faites avec .click, qui est un alias pour .bind('click', function() { ... });.

Pour lier des événements à tous les éléments correspondants et éléments nouvellement créés qui correspondent au sélecteur, vous devez utiliser .live:

$('.reply').live('click', function() { 
    // ... 
}); 
0

Pourquoi utilisez-vous des fonctions JS natives dans jQuery?

document.getElementById('commentStatus'+$(this).attr('data-id')).focus(); 

Aussi, si vous créez des éléments « sur l'air » utiliser en direct pour attacher des événements

$('.writeSComment').click(function() { 

à

$('.writeSComment').live("click", function() { 

Il va affecter tous les éléments, peu importe si elle était chargé de dom, ou plus tard.

// Désolé, je continuais à écrire quand l'affiche éditée