D'abord je suis désolé j'ai un doute sur la localisation du sujet vu que c'est à la fois du JS et Symfony
Pour le contexte, Mon projet est sur Symfony 4 de base je voudrais cacher certains champs de mon formulaire imbriquer et les ré afficher en fonction des valeurs précédentes jusque la rien de bien compliquer je pourrais me débrouiller tout seul mais le soucis c'est que impossible d'accéder aux champs du formulaire imbriquer qui sont ajouter grâce au prototype je vous met mes deux type de formulaire ainsi que ma vue Twig
{# On charge la bibliothèque jQuery. Ici, je la prends depuis le CDN google
mais si vous l'avez en local, changez simplement l'adresse. #}
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
{# Voici le script en question : #}
<script type="text/javascript">
$(document).ready(function () { // On récupère la balise <div> en question qui contient l'attribut « data-prototype » qui nous intéresse.
var $container = $('#formulaire_detailChamps');
// On définit un compteur unique pour nommer les champs qu'on va ajouter dynamiquement
var index = $container.find(':input').length;
// On ajoute un nouveau champ à chaque clic sur le lien d'ajout.
$('#add_category').click(function (e) {
addCategory($container);
e.preventDefault(); // évite qu'un # apparaisse dans l'URL
return false;
});
// On ajoute un premier champ automatiquement s'il n'en existe pas déjà un (cas d'une nouvelle annonce par exemple).
if (index == 0) {
addCategory($container);
} else { // S'il existe déjà des catégories, on ajoute un lien de suppression pour chacune d'entre elles
$container.children('div').each(function () {
addDeleteLink($(this));
});
}
// La fonction qui ajoute un formulaire CategoryType
function addCategory($container) {
// Dans le contenu de l'attribut « data-prototype », on remplace :
// - le texte "__name__label__" qu'il contient par le label du champ
// - le texte "__name__" qu'il contient par le numéro du champ
var template = $container.attr('data-prototype').replace(/__name__label__/g, 'Champ n°' + (
index + 1
)).replace(/__name__/g, index);
// On crée un objet jquery qui contient ce template
var $prototype = $(template);
// On ajoute au prototype un lien pour pouvoir supprimer la catégorie
addDeleteLink($prototype);
// On ajoute le prototype modifié à la fin de la balise <div>
$container.append($prototype);
// Enfin, on incrémente le compteur pour que le prochain ajout se fasse avec un autre numéro
index++;
}
// La fonction qui ajoute un lien de suppression d'une catégorie
function addDeleteLink($prototype) { // Création du lien
var $deleteLink = $('<a href="#" class="btn btn-danger">Supprimer</a>');
// Ajout du lien
$prototype.append($deleteLink);
// Ajout du listener sur le clic du lien pour effectivement supprimer la catégorie
$deleteLink.click(function (e) {
$prototype.remove();
index--;
e.preventDefault(); // évite qu'un # apparaisse dans l'URL
return false;
});
}
});
</script>
Bonjour, tu dis "le soucis c'est que impossible d'accéder aux champs du formulaire imbrique", c'est à dire ?
Cela te provoque une erreur ?
as tu regardé le code html généré pour adapter ton js ?
Impossible de récupérer les champs du prototype
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.