collectiontypeadd.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. function requete(chemin, nomDuDiv, nomDuBouton) {
  2. $.ajax({
  3. url: chemin,
  4. type: 'POST',
  5. dataType: 'json',
  6. success: function (reponse) {
  7. let reponseArray = parseJson(reponse);
  8. collections(reponseArray, nomDuDiv, nomDuBouton);
  9. }
  10. })
  11. }
  12. function parseJson(data) {
  13. let tableau = [];
  14. for (let i = 0; i < data.length; i++) {
  15. let UnObjetJson = data[i];
  16. let obj = JSON.parse(UnObjetJson);
  17. sortie = Object.values(obj)
  18. tableau.push(sortie[0]);
  19. }
  20. return tableau;
  21. }
  22. function collections (reponse, nomDuDiv, nomDuBouton) {
  23. // On récupère la balise <div> en question qui contient l'attribut « data-prototype » qui nous intéresse.
  24. let $container = $('div#'+nomDuDiv);
  25. // On définit un compteur unique pour nommer les champs qu'on va ajouter dynamiquement
  26. let index = $container.find(':input').length;
  27. // On ajoute un nouveau champ à chaque clic sur le lien d'ajout.
  28. $('#'+nomDuBouton).click(function(e) {
  29. addConteneur($container);
  30. e.preventDefault(); // évite qu'un # apparaisse dans l'URL
  31. return false;
  32. });
  33. // On ajoute un premier champ automatiquement s'il n'en existe pas déjà un (cas d'une nouvelle annonce par exemple).
  34. if (index == 0) {
  35. } else {
  36. // S'il existe déjà des catégories, on ajoute un lien de suppression pour chacune d'entre elles
  37. $container.children('fieldset').each(function() {
  38. $container.find(':input').prop("readonly", true);
  39. $container.find(':input').autocomplete({
  40. source: reponse
  41. });
  42. addDeleteLink($(this));
  43. });
  44. }
  45. // La fonction qui ajoute un formulaire RealisateurType
  46. function addConteneur($container) {
  47. // Dans le contenu de l'attribut « data-prototype », on remplace :
  48. // - le texte "__name__label__" qu'il contient par le label du champ
  49. // - le texte "__name__" qu'il contient par le numéro du champ
  50. let template = $container.attr('data-prototype')
  51. .replace(/__name__label__/g, '')
  52. .replace(/__name__/g, index)
  53. ;
  54. // On crée un objet jquery qui contient ce template
  55. let $prototype = $(template);
  56. // On ajoute au prototype un lien pour pouvoir supprimer la catégorie
  57. addDeleteLink($prototype);
  58. // On ajoute le prototype modifié à la fin de la balise <div>
  59. $container.append($prototype);
  60. $container.find(':input').autocomplete({
  61. source: reponse
  62. });
  63. // Enfin, on incrémente le compteur pour que le prochain ajout se fasse avec un autre numéro
  64. index++;
  65. }
  66. // La fonction qui ajoute un lien de suppression d'une catégorie
  67. function addDeleteLink($prototype) {
  68. // Création du lien
  69. //let $deleteLink = $('<a href="#" class="btn btn-danger">Supprimer</a>');
  70. let $deleteLink = $('<a href="#"><i class="fa fa-trash fa-lg" style="color:Tomato;"></i></a>');
  71. // Ajout du lien
  72. $prototype.append($deleteLink);
  73. // Ajout du listener sur le clic du lien pour effectivement supprimer la catégorie
  74. $deleteLink.click(function(e) {
  75. $prototype.remove();
  76. e.preventDefault(); // évite qu'un # apparaisse dans l'URL
  77. return false;
  78. });
  79. }
  80. }