Je recommande deux choses:
Vous pouvez créer une copie du code HTML quand il est vide - de cette façon vous vous éviter d'avoir à cloner quelque chose avec des valeurs déjà et avoir besoin de les effacer. Clone juste le vide que tu as déjà.
Vous avez également défini live
sur la question, mais c'est le bouton "Ajouter une réponse" que vous souhaitez utiliser en direct. Live définira les gestionnaires pour tout ce qui est ajouté au DOM (ce que vous faites). C'est la raison pour laquelle chaque bouton "Ajouter une réponse", sauf le premier, ne fonctionne pas.
var emptyQ = $("li.question").clone(),
emptyA = $("li.answer").clone();
$("#addQuestion").live('click', function(e) {
e.preventDefault();
$('#questioncontainer').append(emptyQ.clone());
});
$(".addAnswer").live('click', function(e) {
e.preventDefault();
$(this).parent().find(".answerContainer").append(emptyA.clone());
});
Exemple de travail: http://jsfiddle.net/jonathon/Sd9Ag/
J'utilise $(this).parent()
pour obtenir le conteneur question/réponse pour le bouton qui a été cliqué. Cela signifie que le même gestionnaire fonctionne pour tous.
Et enfin - je ne sais pas si cela fait une différence, mais j'utilise e.preventDefault()
au lieu de return false
sur les gestionnaires de clic. Je ne sais pas - je pense juste que c'est plus élégant.
Je ne sais pas pourquoi vous étiez abattu, c'est une question parfaitement valide, donc voté juste pour rétablir l'équité :) – Andrey
merci Andrey. Un vote en moins d'une minute! C'est une première. – superUntitled