2014-07-24 3 views
1

J'ai un formulaire où j'ai plusieurs menus déroulants sur la même page. Tous ces menus ont le même nom de classe (ie .clientMenu). Tous les menus ont les mêmes options exactes (bleu, jaune, blanc, noir et vert). Mon but est de désactiver toute la valeur de tous les menus une fois qu'une valeur est sélectionnée.Comment désactiver toutes les options de tous les menus ayant la même valeur jQuery

Si j'ai 10 menus, alors si l'utilisateur sélectionne "bleu" sur n'importe quel menu alors "bleu" devrait être désactivé des 9 autres menus. Par conséquent, "bleu" peut être sélectionné dans un seul menu.

C'est ce que j'ai essayé mais ne fonctionne pas. Quand je dis que ça ne marche pas, je veux dire que ça ne désactive aucune option.

Comment puis-je faire fonctionner ce code?

Merci un groupe à l'avance

$('.clientMenu').change(function(){ 

    $(".clientMenu option").each(function(){ 

     if($(this).val() == $(".clientMenu").val()) 
      $(this).prop('disabled', true); 
     else 
      $(this).prop('disabled', false); 

    }); 
}); 

ÉDITÉ J'ai créé un jsFiddle pour rendre les choses plus faciles http://jsfiddle.net/24yhT/4/

+1

le code a l'air bien, pouvons-nous voir le html ou mieux un violon s'il vous plaît? –

+0

violon! violon! – AmmarCSE

+0

Ici, vous allez http://jsfiddle.net/24yhT/4/ il désactiver l'option ope que l'utilisateur sélectionner dans le menu utilisé. Je dois le désactiver sur l'autre menu et non sur celui choisi par l'utilisateur. – Jaylen

Répondre

3

je peux certainement le rendre plus court, ne sais pas pourquoi le vôtre ne fonctionnerait pas si

function setOptionsDisabled($parent, val, disabled) { 
    $parent.find('option[value="' + val + '"]').prop('disabled', disabled); 
    $parent.find('option[value="0"]').prop('disabled', false); 
} 
$('.clientMenu').change(function(){ 
    $others = $('.clientMenu').not(this); 
    setOptionsDisabled($others, $(this).val(), true); 
    setOptionsDisabled($others, $(this).data('val'), false); 
    $(this).data('val', $(this).val()); 
}); 

http://jsfiddle.net/24yhT/24/

+0

Merci :) c'était en effet la réponse. merci – Jaylen

+0

comment puis-je activer l'option si l'utilisateur change la couleur? donc vous sélectionnez bleu tous les bleus sont désactivés. à partir du même menu, passez du bleu au vert. alors j'ai besoin de bleu pour re-activé ..? – Jaylen

+0

Voir modification pour réactiver – dave

0

Le problème est lorsque vous marquez l'élément comme désactivé dans le premier select, $(".clientMenu").val() devient null (éléments désactivés ne sont pas considérés comme des sélections valides, vous perdez la valeur). Les itérations suivantes ne correspondent jamais à la valeur et les option ne sont jamais désactivées. Une option consiste à stocker la valeur de la liste déroulante modifiée dans une variable (var val = $(this).val()) avant de faire défiler les options et de les comparer à la place. Êtes-vous sûr de ne pas vouloir désactiver la valeur dans les listes déroulantes autres? À l'heure actuelle, votre code désactive également cette option dans la liste déroulante des modifications. Vous devriez probablement filtrer comme ceci $(".clientMenu").not(this).find("option")....

Questions connexes