Activé/désactivé le bon un input sélectionné par un bouton

Résolu/Fermé
needhelp - 20 juil. 2022 à 10:32
 needhelp - 20 juil. 2022 à 11:30

Bonjour, 

J'ai un tableau dont une des colonnes possède des inputs pour saisir un nombre quelconque. Ces inputs sont non-modifiable au chargement de la page et lorsqu'on appuie sur un bouton le champ de saisie devient modifiable. Pour le rendre de nouveau non-modifiable après avoir modifier la valeur de l'input on appuie sur un autre bouton. 

Pour chaque ligne du tableau il y a un input et des boutons, et les deux boutons récupère l'id de la ligne pour activer/désactiver l'input se trouvant sur la ligne. 

Je récupère le bon id lorsque j'appuis sur un des bouton

Mon problème est le suivant : c'est que lorsque j'appuis sur un des boutons se trouvant sur une ligne hors de la première ligne, les boutons désactive/active l'input de la première ligne au lieu de celui se trouvant sur la même ligne que les boutons cliqués. 

J'aimerai faire en sorte que ce soit l'input de la ligne sélectionnée qui se désactive ou s'active. 

Voici mon code en JavaScript  :

La fonction qui permet d'afficher les lignes du tableau: 

row.forEach(ref =>  liste += '<tr id="' + ref.id + '"><td /*style="text-align: center"*/>' + ref.reference + '</td><td><input id="nombre" type="text" value="' + ref.seuil + '" disabled></td><td><button id="'+ ref.id + '" type="button" id="modifier" onclick="modifier(this)" </button><button id="'+ ref.id + '" type="button" onclick="valider(this)" id="valider" </button></td>);

la fonction qui permet d'activé un input : 

function modifier(id){
    var id = id.id;
    document.getElementById('nombre').disabled = false; 
    console.log(id);

}

Fonction qui désactive l'input après une modification

function valider(id){
    var id = id.id;
    $.ajax({
        cache: false,
            url: "../data/MAJOneBis",
            type: "POST",
            async: false,
            data: ({
                id: id,
                seuil: $("#nombre").val(),
                table: 'refSeuil'
            }),
            success: function (response, status) {
                console.log(response);
                if(response.includes('Modification du seuil réussie !')){
                    
                    document.getElementById('nombre').disabled = true;
                }
          
                },
                error: function (response, status) {
                    console.log(response);
                    console.log(status);
        
            }
    })
}

Merci par avance pour votre aide

A voir également:

1 réponse

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 juil. 2022 à 11:11

Bonjour

Le plus simple serait d'attribuer un id UNIQUE a cahque inputpar exemple sous la forme nombre_1

1 etant l'id correspondant de la ligne .

Il sera alors facile dans ton code js de cibler l'input désiré..

getElementById('nombre_'+id).


0

Ah oui, je n'avais pas pensé à l'id unique.

J'ai modifier le nom de l'input par id="nombre_'+ ref.id +'", ref.id étant id de la ligne sélectionnée

et j'ai remplacé  

document.getElementById('nombre') par getElementById('nombre_'+id)

sans oublier 

seuil: $("#nombre").val(), par seuil = $("#nombre_"+id).val();

au cas où certain veulent comprendre ce que j'ai changé en passant par là 

ça fonctionne merci pour votre aide !

0