Partage
  • Partager sur Facebook
  • Partager sur Twitter

portée des variables

ajax

Sujet résolu
    2 mai 2018 à 13:23:59

    Bonjour, voici une fonction qui permet de modifier les valeurs d'un tableau :

    La fonction success recois le résultat de ma requête ajax.

    J'essai sur les éléments btModifier et btSupprimer (ligne 64-80) de récupérer la valeur d'un de ses résultats.

    J'ai essayer de plusieurs manières avec des this par exemples mais j'y arrive pas.

    Si vous avez une idée je suis preneur !

    $("#recherche").keyup(function(){
    
        // On récupère l'URL,  on le troncate (en enlevant login et en changeant la route )
        var url = $("#url").val();
        var indice = url.indexOf("login", 5);
        var urlCut = url.substring(0,indice);
        
        $.ajax({
           url : urlCut+"search/"+$("#recherche").val(), // La ressource ciblée
           type : 'GET',
           dataType : 'JSON',
           
            
    
            success : function(donnees){ 
    
                    
            var corpsTableau = $('#corpsTableau');
            
            corpsTableau.empty();                    
    
            for(var i = 0; i < donnees.length; i++){
              
               
               
                // Le but est de donnée l'id du médicament pour afficher une div qui porte ce meme id.
                var tr = document.createElement("tr");            
    
                var th = document.createElement("th");                         
                    th.scope="row";
                    th.innerHTML = donnees[i].id_medicament;
    
                var td2 = document.createElement("td");
                    td2.innerHTML = donnees[i].nom_commercial;
    
                var td3 = document.createElement("td");
                    td3.innerHTML = donnees[i].lib_famille;
    
                var td4 = document.createElement("td");
                    td4.innerHTML = donnees[i].prix_echantillon;
    
                var td5 = document.createElement("td");
                    td5.innerHTML = donnees[i].effets;
    
                var td6 = document.createElement("td");
                    td6.innerHTML = donnees[i].contre_indication;
    
                var td7 = document.createElement("td");
                    td7.innerHTML = donnees[i].depot_legal;
    
                // la ligne cachée
    
                var trHidden = document.createElement("tr");                
                    trHidden.id = "trHidden" + donnees[i].id_medicament;    
    
                var tdVide1 = document.createElement('td');
                var tdVide2 = document.createElement('td');
                var tdVide3 = document.createElement('td');
                var tdVide4 = document.createElement('td');
                var tdVide6 = document.createElement('td');
                var tdVide7 = document.createElement('td');
    
    
                var btModifier = document.createElement("button");
                    btModifier.className = 'btn btn-primary';
                    btModifier.type= "button";
                    btModifier.id = 'btModifier' + donnees[i].id_medicament;
                    btModifier.innerHTML = 'Modifier';
                    btModifier.addEventListener("click", function(){
                        console.log(donnees[i].id_medicament);
                    }, false);
                    
                var btSupprimer = document.createElement("button");
                    btSupprimer.className = 'btn btn-primary';
                    btSupprimer.type= "button";
                    btSupprimer.id = 'btSupprimer' + donnees[i].id_medicament;
                    btSupprimer.innerHTML = 'Supprimer';
                    btSupprimer.addEventListener("click", function(donnees, i){
                        console.log(donnees[i].id_medicament);
                    }, false); 
    
                var tdButtons = document.createElement('td');
                    tdButtons.append(btModifier);
    
                trHidden.appendChild(tdVide1);
                trHidden.appendChild(tdVide2);
                trHidden.appendChild(tdVide3);
                trHidden.appendChild(tdVide4);
                trHidden.appendChild(tdButtons);
                trHidden.appendChild(tdVide6);
                trHidden.appendChild(tdVide7);
    
                tr.appendChild(th);
                tr.appendChild(td2);
                tr.appendChild(td3);
                tr.appendChild(td4);
                tr.appendChild(td5);
                tr.appendChild(td6);
                tr.appendChild(td7);
    
    
                corpsTableau.append(tr);
                corpsTableau.append(trHidden);
                
                }
            }
        });
    });

    Merci !

    -
    Edité par Romsteack 2 mai 2018 à 13:24:15

    • Partager sur Facebook
    • Partager sur Twitter

    D'un seul Homme il vaut mieux se méfier, à deux ils ont pu comploter, trois est le chiffre auquel on peux se fier

      2 mai 2018 à 13:58:11

      i ne vaut pas ce que tu crois lorsque les fonctions anonymes de ton event listener sont appelées.

      Essaie de remplacer "var" par "let" à la ligne 22.

      • Partager sur Facebook
      • Partager sur Twitter
        2 mai 2018 à 15:42:49

        Yo merci ! en fait j'ai trouvé la réponse !

        il fallait faire une closure sinon elle s'éxecutait directement :

        btModifier.addEventListener("click", (function(donnee){
               return function() {
                   console.log(donnee);
               }
        })(donnees[i]), false);
                        


        bonne journée

        • Partager sur Facebook
        • Partager sur Twitter

        D'un seul Homme il vaut mieux se méfier, à deux ils ont pu comploter, trois est le chiffre auquel on peux se fier

        portée des variables

        × 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.
        • Editeur
        • Markdown