Partage
  • Partager sur Facebook
  • Partager sur Twitter

Impossible de créer un évènement sur éléments créé

    4 avril 2024 à 20:40:08

    Bonjour à tous,

    Je me permets de poster car je rencontre des difficultés a ajouter des évènements jquery sur des éléments crées en jquery.

    Voici le code de créations d'éléments:

    $("#bou-"+row).append(
                        `<div class="col-md-4 col-12">
                            <div class="card">
                                <div class="card p-2" id="card-${ret[compt]['id_article']}">
                                    <h4 class="text-center">${ret[compt]['titre']}</h4>
                                    <br>
                                    ${ret[compt]['description']}
                                    <hr>
                                    <div class="text-center">${ret[compt]['prix_unitaire']} € </div>
                                    <form class="row p-3" action="foyer-consult.php" method="get">
                                        <input type="hidden" name="idf" value="${ret[compt]['idf']}" id="rf">
                                        <button class="btn btn-success mb-2" id="add-${compt}">Consulter</button>
                                    </form>
                                    <form class="row p-3 add-cart" action="" method="post" id="">
                                        <input type="hidden" name="idf" value="${ret[compt]['idf']}" id="rf">
                                        <button class="btn btn-warning mb-2 cart" id="">Ajouter au panier</button>
                                    </form>
                                </div>
                            </div>
                        </div>`
                    );

    une fois mes elements crée sur mon formulaire j'ai rajouter ce code:

    $('.add-cart').submit(function (e) { 
            e.preventDefault();
            e.stopPropagation();
    
            // On recherche si il y a deja un panier en cours
            $.ajax({
                type: "post",
                url: "ajax/recherche-panier-client.php",
                dataType: "TEXT",
            })
            .done(function(ret){
                console.log('Valeur de ret : ' + ret)
            })
            .fail(function(ret){
                console.log(ret.responseText)
            })
            // Si pas de panier on le créé
            // On ajoute au panier
            
        });

    Malheureusement ce code ne fonctionne pas.

    Pouvez vous me dire comment ajouter des évènements sur des éléments crée ?


    • Partager sur Facebook
    • Partager sur Twitter
      6 avril 2024 à 11:09:35

      Bonjour, 

      De mémoire chez JQ c'est .on(), par exemple :

      $("#el").on("submit", function(e) {}

      Mais l'appel a l'air de marcher tel quel (avec quelques modifes, dont dégommage de "ret" que je ne connais) : test

      Il n'y a pas d'appel ?

      Sans msg d'erreur c'est pas facile, elle dit quoi la console ?

      • Partager sur Facebook
      • Partager sur Twitter
        7 avril 2024 à 15:58:51

        Hello, c'est normal en fait puisque $('.add-cart').submit(…) est évalué bien avant que les éléments ne soient effectivement ajoutés au DOM.

        Il est donc à ce moment là trop tard pour leur attacher l'événement "submit"

        La méthode recommandée dans ce cas est de tirer parti de la propagation d'événement en attachant ce dernier sur un élément supérieur du DOM qui sera toujours présent dans la page. En jQuery cela est possible facilement avec la méthode .on() en précisant un second paramètre correspondant au sélecteur de filtrage :

        $(document).on('submit', '.add-cart', function() {
          …
        });

        J'ai mis $(document) ne connaissant pas l'arborescence complète de ton DOM, mais l'idée est de chopper l'élément englobant le plus proche de l'endroit où tu insères tes données.

        • Partager sur Facebook
        • Partager sur Twitter

        Impossible de créer un évènement sur éléments créé

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        • Editeur
        • Markdown