web-dev-qa-db-fra.com

Problème .parent (). remove ()

J'ai un formulaire basé sur jQuery où vous pouvez ajouter des personnes supplémentaires à l'application. Je clone le premier ensemble de champs et l'ajoute à la fin, jusqu'à un maximum de 3 personnes supplémentaires. Lorsque vous avez ajouté une personne supplémentaire, vous avez la possibilité de la supprimer. 

Cependant, mon bouton Supprimer ne fonctionne pas. C'était, plus tôt, jusqu'à ce que j'ajoute les fonctions supplémentaires au clonage pour changer les identifiants d'autres éléments dans le fieldset.

J'utilise:

$(".remove").click(function() {
    $(this).parent().remove();

qui fonctionnait à l'origine mais ce n'est pas le cas et je ne comprends pas pourquoi.

J'ai supprimé les lignes qui arrêtent le premier "supprimer cette personne" pour montrer que le premier fonctionne toujours, mais que le reste ne fonctionne pas. (Je positionnerai éventuellement le premier stade quand il sera corrigé)

Probablement plus facile à voir alors je l'ai mis ici http://bit.ly/kHcAbe

Donc, essentiellement, des idées pour lesquelles mon "supprimer cette personne" ne fonctionne pas sur tout sauf sur la première section?

15

Essayer:

$(document).on('click', '.remove', function() {
    $(this).parent().remove();
});

Les événements sont liés au chargement de la page, de sorte que les éléments récemment ajoutés ne le sont pas.

22
PeeHaa

L'appel de fonction 'live' est obsolète et ne fonctionne plus. Vous pouvez trouver des instructions sur la façon de réécrire des fonctions à l'aide de la méthode de remplacement 'on ()' ici et des informations supplémentaires sur la désapprobation:

http://api.jquery.com/live/

Pour gérer tous les éléments actuels et nouvellement créés, vous devez maintenant utiliser:

$(document).on("click", ".remove", function() {
    $(this).parent().remove();
});

jQuery s’exécute sur l’objet document, pas sur l’élément. Il existe un paramètre supplémentaire permettant de spécifier les éléments à surveiller et d’ajouter des écouteurs d’événements.

8
Dave Hilditch

Assurez-vous de fermer votre expression:

$(".remove").click(function() {
    $(this).parent().remove();
});
5
orolo

Vous pouvez le faire pour supprimer le parent:

 $(document).on("click", ".remove", function() { 
      $(this).parent().remove(); 
 });

ou vous pouvez le faire pour supprimer tous les parents:

 $(document).on("click", ".remove", function() { 
      $(this).parents().remove();
 });
1
Andrea_dev

Les éléments n'existent pas à l'origine, ce qui signifie que vous devez utiliser .live() ou .delegate()

Par exemple, changez:

utilisez $(".remove").click(...) au lieu de $(".remove").live("click", ...) this

0
davin