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 :

Sélectionner une option sans pouvoir la re-sélectionner par la suite


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2020
    Messages : 30
    Par défaut Sélectionner une option sans pouvoir la re-sélectionner par la suite
    Bonjour à tous,

    Je me permets de vous présenter mon problème, je bloque sur un truc.

    Sur un page php, je propose deux fois le même menu déroulant comme suit:

    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
    <label>Choisir un véhicule </label>
    <select name="nom1" id="nom1">
    <option  value="1">Voiture</option>
    <option  value="2">Camion</option>
    <option  value="3">Moto</option>
    </select><p>
     
    <label>Choisir un autre véhicule </label>
    <select name="nom2" id="nom2">
    <option  value="1">Voiture</option>
    <option  value="2">Camion</option>
    <option  value="3">Moto</option>
    </select>
    </p>

    J'aimerai que, par exemple, si l'utilisateur choisit "Voiture" dans le menu n° 1, il ne puisse plus choisir cette option dans le menu n°2. Je pensais mettre un message d'erreur, s'il clique à nouveau sur "Voiture", du style "Vous avez précédemment choisi cette option".

    Je pense que c'est du JavaScript que je dois faire mais je ne sais pas quelques sont les éléments JavaScript que je dois mobiliser.

    Mon objectif est de "m'autoformer", c'est d'apprendre pour pouvoir le refaire après. Est-ce que vous auriez des idées, ou des pistes pour que j'essaye de le faire ?

    Merci à tous

    A bientôt

    Bruno

  2. #2
    Membre actif
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2020
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2020
    Messages : 30
    Par défaut
    Rebonjour,

    Alors, j'ai essayé ceci:

    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
    <label>Choisir un véhicule </label>
    <select name="nom1" id="nom1" class="test1" onClick="exclure();">
    <option value="0" selected="selected">Choisir</option>
    <option value="1">Voiture</option>
    <option value="2">Camion</option>
    <option value="3">Moto</option>
    </select>
    <p>
    <label>Choisir un autre véhicule </label>
    <select name="nom2" id="nom2" class="test2" onClick="exclure();">
    <option value="0" selected="selected">Choisir</option>
    <option value="1">Voiture</option>
    <option value="2">Camion</option>
    <option value="3">Moto</option>
    </select>


    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
    17
    18
    function exclure() {
    var voiture = 1;
    var camion = 2;
    var moto = 3;
    var checkbox1 = document.getElementsByClassName( "test1" );
    var checkbox2 = document.getElementsByClassName( "test2" );
    for ( var i = 0; i < checkbox1.length; i++ ) {
    for ( var j = 0; j < checkbox2.length; j++ ) {	
    if ( checkbox1.item( i ).checked == checkbox2.item( j ).checked ) {
    checkbox1.item( i ).checked = false;
    checkbox2.item( j ).checked = false;
    alert( 'Vous avez déjà choisi cette option.' )
    exitFunction = true
     
    if ( checkbox1.item( i ).checked != checkbox2.item( j ).checked ) {
    checkbox1.item( i ).checked = true;
    checkbox2.item( j ).checked = true;
    }}}}}
    Et ça ne fonction pas, dès que je clique sur n'importe quel des menus déroulants, cela affiche "Vous avez déjà choisi cette option."
    Je crois que je ne sais pas (notamment), récupérer la valeur de l'input.

    C'est rageant. Si vous avez des idées, des conseils, etc. Je suis preneur

    Merci et à bientôt

    Bruno

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 217
    Par défaut
    Bonjour,
    je te propose de regarder : Suppression d'une option déjà choisie et la discussion associée.

  4. #4
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Bonjour,

    désactiver l'option sélectionnée dans l'autre select (et vice-versa) :



    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
    22
    23
    24
    25
    26
    27
    // -------------------
    window.addEventListener("DOMContentLoaded", (event) => {
      "use strict";
      const sel_1 = document.querySelector('#nom1');
      const sel_2 = document.querySelector('#nom2');
      sel_1.addEventListener('change', (e) => {
        sel_option_disable(sel_2,sel_1.value);
      });
      sel_2.addEventListener('change', (e) => {
        sel_option_disable(sel_1,sel_2.value);
      });
    });
    // -------------------
    // desactiver l option sélectionnée dans l'autre select
    function sel_option_disable(sel,val)
    {
      //console.log(val);
      sel.querySelectorAll('option').forEach( (opt) => {
        if( opt.value == val && val != '0' )
        {
          opt.setAttribute('disabled', 'disabled');
        } else {
          opt.removeAttribute('disabled');
        }
      });
    };
    // -------------------

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 217
    Par défaut
    Citation Envoyé par jreaux62
    désactiver l'option sélectionnée dans l'autre select (et vice-versa) :
    Malheureusement ce n'est pas pris en compte sur les supports tactiles et ce compte-tenu de la différence d’implémentation des <select> sur ceux-ci.

  6. #6
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    ...ce n'est pas pris en compte sur les supports tactiles...
    OK... Vu. ça craint.

    Du coup, si j'en crois ton script, la seule solution est de supprimer l'option du DOM ?

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

Discussions similaires

  1. Effacer une MFC sans effacer les autres MFC par Macro
    Par patmicro dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/10/2020, 14h32
  2. Réponses: 3
    Dernier message: 20/08/2018, 09h42
  3. Réponses: 3
    Dernier message: 09/04/2014, 18h31
  4. Réponses: 5
    Dernier message: 30/07/2010, 20h33
  5. [MySQL] garder une valeur en memoire et la reutiliser par la suite
    Par stefon dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 13/12/2006, 14h00

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