Jquery inopérant sur du contenu généré en jquery

Résolu/Fermé
ephelya Messages postés 282 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - Modifié le 24 janv. 2021 à 10:47
ephelya Messages postés 282 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 - 24 janv. 2021 à 11:15
Bonjour tout le monde,

J'ai besoin, pour le back office que je suis en train de créer, de récupérer une liste de tags pour pouvoir la gérer.
Voici le script qui récupère mes tags
$('label[class^=catype_').click(function (){
var idcat = $(this).find("input").attr("id").split("_")[1];
// console.log("test "+idcat);
if ($(".list input:checked").length == 0)
{
    $(".listrecipes").remove();
    $(".list").before("<div class='listrecipes'></div>");
    $.ajax({ 
    type: "POST",
    //dataType: 'json',
    url: "ajx/ajax_nutrit.php", 
    data: {gettags:1, idtype: idcat, debug:0},
    error : function(x,err){
            alert(err);
        },
    success: function(data){
       // console.log("ok "+data);
        $(data).each(function (a, b) {
            $(b).each(function (id, tag) {
                var lirec = "<li id='rec_"+tag.id+"'><span id='idtag'>"+tag.id+"</span><span class='tagtext'>"+tag.categorie+"</span><input class='n_idtag' type='text' placeholder='id tag'><input type='text' class='n_idtyp'  placeholder='id type'><button class='afftag'><i class='fas fa-arrow-alt-circle-right'></i></button><li>";
                $(".listrecipes").append(lirec);
            });
        });
    }
 });     


Ce script est ok et m'affiche bien ma liste.
Et voici le script qui me permet de gérer mes tags :
        $(".afftag").click(function(){
            var idtag = $(this).parent().attr("id").split("_")[1];
            var newtag = $(".listrecipes li#rec_"+idtag).find("input.n_idtag").val();
            var newtype = $(".listrecipes li#rec_"+idtag).find("input.n_idtyp").val();
            console.log("upd "+newtag+" "+newtype);
        }); 

Ce script fonctionne parfaitement lorsque je le teste dans la console mais il ne se passe rien quand il est simplement dans mon code.
Je précise que les autres scripts de la page fonctionnent sans pb,qu'ils soient avant ou après celui-ci.
Ce n'est pas la première fois que j'ai des pbs avec les contenus du DOM générés en jquery/js, ça réagit comme si ils n'existaient pas...
Je précise également que ça ne marche pas non plus si je remplace par ce script
        $(".afftag").click(function(){
            console.log("ok ");
        }); 

ou encore celui-ci, qui fonctionne très bien avec les autres boutons de la page :
        $("button").click(function(){
            console.log("ok ");
        }); 

Qu'est-ce que j'ai mal fait ??
Merci d'avance pour votre aide !! :)
Configuration: Macintosh / Firefox 84.0

2 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
24 janv. 2021 à 10:49
Bonjour

ce n'est pas un problème de jQuery, mais un souci de compréhension de fonctionnement du script en question...
Tu fais de l'Ajax.
(Qui, par défaut, fonctionne en mode asynchrone)

pour que ton code fonctionne, il faut attendre que ton Ajax soit terminé.

Le plus simple, c'est de mettre ce code dans le success ...
là, il sera bien exécuté une fois que ton appel Ajax sera terminé.
0
ephelya Messages postés 282 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2
24 janv. 2021 à 10:56
Okkkkk !!! C'est bon, ça fonctionne. Merci beaucoup ! :-)
Ceci dit ça me surprend pcq au moment où je clique, l'ajax est bel et bien terminé. Il y a un truc qui m'échappe dans le fonctionnement côté serveur, je crois...
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718
24 janv. 2021 à 10:58
Au moment où tu cliques l'Ajax et certainement terminé....
mais au moment où tu veux attacher l'événement clique sur ton bouton.... Là, l'Ajax ne l'est pas...
Et par conséquent tes boutons n'existe pas encore...
0
ephelya Messages postés 282 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2 > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
24 janv. 2021 à 11:04
Ok. Je saisis la logique mais c'est le fonctionnement global côté serveur que je ne voyais pas comme ça..
Je n'y connais pas grand chose en js/jquery, un de ces 4 je me plongerai dedans sérieusement. ;-)
Merci encore pour ton aide.
Ça fait un paquet de fois que tu me sauves la mise, depuis des années... Si tu décroches de temps en temps du boulot, un de ces 4 je t’offrirai un verre à Orléans, je te dois bien ça ! :D
Enfin si jamais les bars rouvrent un jour....
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 718 > ephelya Messages postés 282 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023
24 janv. 2021 à 11:11
Ah c'est gentil, mais j'ai quitté Orléans depuis trois ans.
Faudra que tu pousses un peu plus vers l'ouest pour me trouver :-)

PS: CommentCaMarche n'est pas mon boulot ( je suis un simple bénévole/utilisateur de ce site).
0
ephelya Messages postés 282 Date d'inscription mercredi 28 septembre 2011 Statut Membre Dernière intervention 20 juin 2023 2 > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
24 janv. 2021 à 11:15
Ce n'est peut-être pas ton boulot mais je ne me rappelle pas beaucoup de fois où tu ne m'as pas répondu dans les minutes qui suivaient ma question... Allez, parfois quelques heures !! :D :D
Tant pis pour le verre, moi aussi je vais quitter Orléans d'ailleurs. ;-)
0