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

Résolu
ephelya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   -  
ephelya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   -
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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   Statut Membre Dernière intervention   2
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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   Statut Membre Dernière intervention   2 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > ephelya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   2 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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