IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Mettre les inputs d'une balise TR en checked false


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 131
    Points : 111
    Points
    111
    Par défaut Mettre les inputs d'une balise TR en checked false
    Bonjour à tous,

    Je croyais avoir saisi le principe (beaucoup de message, mais rien que j'arrive à adapter), mais visiblement j'ai pas la solution qui fonctionne, je viens donc vous solliciter pour une aide:

    J'ai une extraction qui se fait d'une BDD dans un formulaire avec des boutons radios pour la selection, mais j'ai fais un exemple court représentatif sur 2 lignes:
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <form>
        <table>
            <tr>
                <td><div class="form-radio"> <input type="radio" name="radel[]" id="btnradio" class="btnradio" value="" /> </div></td>
                <td><div class="box"> <input type="text" name="nom" placeholder="nom" class="inp_form" value="nom" disabled /> </div></td>
                <td><div class="box"> <input type="text" name="nom" placeholder="prenom" class="inp_form" value="prenom" disabled /> </div></td>
                <td><div class="box"> <input type="text" name="email" placeholder="email" class="inp_form" value="email" disabled /> </div></td>
            </tr>
            <tr>
                <td><div class="form-radio"><input type="radio" name="radel[]" id="btnradio2" class="btnradio" value="" /> </div></td>
                <td><div class="box"><input type="text" name="pseudo" placeholder="pseudo" class="inp_form" value="" id="" disabled /> </div></td>
                <td><div class="box"><input type="text" name="genre" placeholder="genre" class="inp_form" id="" disabled /> </div></td>
            </tr>
        </table>
    </form>

    et le JS

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // Sélection d'un bouton radio
    const btradios = document.querySelectorAll('input[type="radio"]');
     
    btradios.forEach(radio => {
        radio.addEventListener('change', function() {
            const trElement = this.closest('tr'); // Selection de l'élement parent "tr"  
     
            if (this.checked === true) {
                // On active tous les champs de text input de l'élément tr
                trElement.querySelectorAll('input[type="text"]').forEach(input => {
                    input.disabled = false;
                });
            }        
            if (checked === false){
                // de-active tous les champs de text input de l'élément tr
               trElement.querySelectorAll('input[type="text"]').forEach(input => {
                   input.disabled = true;
               });
            }
        });
    });

    Cela ne fonctionne qu'à moitié, car lorsque je sélectionne un autre bouton radio, les inputs ne sont pas à nouveau disabled.
    J'espère que mes explications sont compréhensibles. lol et par avance merci de vos aides.
    JLuc
    -------------
    - Apache serveur 2.4.5.4
    - Php 8.2.16
    - 5.5.57-MariaDB / 10.7.3-MariaDB
    - Qnap serveur TS-473

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 050
    Points : 44 568
    Points
    44 568
    Par défaut
    Bonjour,
    déjà je pense qu'il te manque un this sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (checked === false){
    ceci étant sur l'événement change tu ne passes que dans la condition this.checked === true, seul le radio cliqué est concerné.

    Il te faut donc revoir ton approche !

  3. #3
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 131
    Points : 111
    Points
    111
    Par défaut
    Hello NoSmoking

    Merci d'avoir apporté une réponse. Oui en effet, j'ai corrigé l'erreur. Merci

    Alors, en fait, je sais plus trop quelle approche prendre ! Je suis un peu perdu.
    Je pensais que le fait que cela soit dans une boucle règlerait le soucis !

    JLuc
    -------------
    - Apache serveur 2.4.5.4
    - Php 8.2.16
    - 5.5.57-MariaDB / 10.7.3-MariaDB
    - Qnap serveur TS-473

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 050
    Points : 44 568
    Points
    44 568
    Par défaut
    Il te faut effectivement une boucle pour traiter tous les type=""radio" qui ont le même name.
    A chaque fois qu'il y en a un qui devient checked l'événement sera déclenché et uniquement pour celui checked, cela peut être déroutant mais les autres sont modifiés en « sous-marin » sans déclencher d'événement particulier.

    Donc on affecte une fonction à tous les type=""radio" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    const btradios = document.querySelectorAll('input[type="radio"]');
    btradios.forEach((el) => {
      el.addEventListener("change", activeLigne);
    });
    ... on utilise une fonction pour éviter de charger la mémoire, fonction qui pourrait ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    function activeLigne(e) {
      // récup du name
      const radioName = e.target.name;
      // récup tous les radios avec le même name
      const listRadio = document.querySelectorAll(`[name="${radioName}"]`);
      // on affecte suivant checked or not
      listRadio.forEach((radio) => {
        // récup. parent ligne
        const trParent = radio.closest("TR");
        // récup. input de la ligne
        const inputs = trParent.querySelectorAll("input[type='text']");
        inputs.forEach((el) => {
          el.disabled = !radio.checked;  // ou avec set/remove Attribute
        })
      });
    }
    ... voir les commentaires.

  5. #5
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 131
    Points : 111
    Points
    111
    Par défaut
    Hello NoSmoking

    En effet, l'approche est différente. J'ai bien lu tes commentaires ( et surtout compris).

    Merci encore à toi.
    Bonne journée
    JLuc
    -------------
    - Apache serveur 2.4.5.4
    - Php 8.2.16
    - 5.5.57-MariaDB / 10.7.3-MariaDB
    - Qnap serveur TS-473

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 050
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 050
    Points : 44 568
    Points
    44 568
    Par défaut
    A la relecture du code on aurait pu être plus concis !

    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // récup tous les radios avec le même name
    const listRadio = document.querySelectorAll(`[name="${radioName}"]`);
    on aurait pu mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // récup tous les radios avec le même name
    const listRadio = document.getElementsByName(radioName);
    ... c'est moins alambiqué et plus parlant

  7. #7
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 131
    Points : 111
    Points
    111
    Par défaut
    D'accord, je vais en tenir compte et modifier comme tel.
    Merci beaucoup
    JLuc
    -------------
    - Apache serveur 2.4.5.4
    - Php 8.2.16
    - 5.5.57-MariaDB / 10.7.3-MariaDB
    - Qnap serveur TS-473

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/03/2007, 09h49
  2. [SQL] Comment je peux mettre les résultat d'une requete dans un fichier
    Par Maria1505 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 10/12/2006, 21h44
  3. Réponses: 3
    Dernier message: 04/07/2006, 16h34
  4. [MySQL] mettre les resultats d'une requete dans un select
    Par Ludo75 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 18/01/2006, 16h19
  5. Mettre les <input> en disabled
    Par Oberown dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 05/10/2004, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo