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

jQuery Discussion :

Multiple selects : empêcher la sélection si option déjà sélectionnée dans un autre select


Sujet :

jQuery

  1. #21
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Citation Envoyé par Toufik83 Voir le message
    Bonjour,

    Voici le script adapté avec jQuery :
    ...
    Bonjour Toufik,

    Merci beaucoup. En fait cela fonctionne...jusqu'au 3ème select. Je select prénom. Ensuite département, ok, prénom est disabled. Le 3ème select est nom ; prénom et département sont disabled. Mais lorsque j'arrive au 4ème champ email, le premier, prénom, est à nouveau enabled...

    Précision : ton code, tel quel, ne fonctionne pas du tout, je dois adapter comme suit :

    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
    	$(document).on('change','.set_column_data', function(){
    		console.log('change');
    	  let values=$('.set_column_data')
    		.map((i,s)=>{
    		if($(s).val()!="")
    			 return $(s).val();
    		}).get();
     
    	  $('.set_column_data option').removeAttr('disabled')
    	  .parent().each((i,select)=>{
    			if(!$(select).is(this))
    			values.map(v=>{
    			$(select).find('option[value="'+v+'"]').attr('disabled','disabled');
    			});
    	  });
    	});

  2. #22
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 262
    Par défaut
    Il y a un problème avec const allSelects = document.querySelectorAll("[name='set_column_data']");
    Parce qu'un console.log retourne un tableau de length 0
    puis ...
    Précision : ton code, tel quel, ne fonctionne pas du tout, je dois adapter comme suit :
    tu ne nous avais pas dit que tu chargeais ces <select> en Ajax !!!!

    Il te faut dans ce cas faire l'initialisation en retour de requête.



    En fait cela fonctionne...jusqu'au 3ème select.
    Effectivement il semblerait qu'il y ai un soucis sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      let values = $('.set_column_data')
        .map((i, s) => {
          if ($(s).val() != "")
            return $(s).val();
        }).get();
    ... néanmoins, cela fonctionne avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let values = $('.set_column_data')
      .map(function() {
        const value = this.value; // $( this ).val();
        if (value != "")
          return value;
      }).get();

  3. #23
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    tu ne nous avais pas dit que tu chargeais ces <select> en Ajax !!!!
    En effet, désolé...j'étais persuadé l'avoir fait

    Le code de Toufik, modifié par No Smoking, fonctionne très bien !
    Juste une dernière demande : est-il possible de créer une exception ? Je veux ajouter l'option "Ne pas importer" à chaque select, et bien sûr, cette option doit pouvoir être reproduite dans un autre

    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
    			$html .= '<table class="table table-bordered"><tr>';
     
    			for($count=0; $count < count($file_header); $count++){
    				$html .= '<th>
    				<select name="set_column_data" class="form-select form-control set_column_data" data-column_number = "'.$count.'">';
     
    				//if($count == 0)
    					$html .= '<option value="">Choix</option>';
    					$html .= '<option value="ne_pas_importer">Ne pas importer</option>';
    					foreach($array_fields as $value=>$etiquette){
    						$html .= '<option value="'.$value.'">'.$etiquette.'</option>';
    					}
    				//}
     
    				$html .= '</select></th>';
    			}
    			$html .= '</tr>';

  4. #24
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 262
    Par défaut
    En effet, désolé...j'étais persuadé l'avoir fait




    Juste une dernière demande : est-il possible de créer une exception ? Je veux ajouter l'option "Ne pas importer" à chaque select, et bien sûr, cette option doit pouvoir être reproduite dans un autre
    Il te suffit d'ajouter une option comme :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value="-1">No import</option>
    et de l'exclure du test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $('.set_column_data option').removeAttr('disabled')
      .parent().each((i, select) => {
        if (select != this) {
          values.map(v => {
            if (-1 != v) {
              $(select).find('option[value="' + v + '"]').attr('disabled', 'disabled');
            }
          });
        }
      });

  5. #25
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Merci à tous c'est super top !!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/07/2020, 11h29
  2. Réponses: 1
    Dernier message: 04/06/2019, 15h07
  3. Multiple select - sélection impossible
    Par mouraf dans le forum Struts 2
    Réponses: 1
    Dernier message: 19/09/2009, 15h50
  4. Réponses: 1
    Dernier message: 08/12/2006, 16h00
  5. Empécher la sélection du texte des pages dans un WebBrowser
    Par DevelOpeR13 dans le forum Web & réseau
    Réponses: 2
    Dernier message: 05/06/2003, 18h36

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