58 votes

jQuery - désactiver les options sélectionnées

Besoin de désactiver déjà des options sélectionnées dans la boîte de sélection à l'aide de jQuery. J'aimerais qu'il en gris comme asmselect.

Test de mon exemple ici.

//JS
$("#theSelect").change(function(){          
  var value = $("#theSelect option:selected").val();
  var theDiv = $(".is" + value);

  theDiv.slideDown().removeClass("hidden");
});


$("div a.remove").click(function () {     
  $(this).parent().slideUp(function() { $(this).addClass("hidden"); }); 
});

//HTML
<body>
<div class="selectContainer">
    <select id="theSelect">
        <option value="">- Select -</option>
        <option value="Patient">Patient</option>
        <option value="Physician">Physician</option>
        <option value="Nurse">Nurse</option>
    </select>
</div>
<div class="hidden isPatient">Patient <a href="#" class="remove" rel="Patient">remove</a></div>
<div class="hidden isPhysician">Physician <a href="#" class="remove" rel="Patient">remove</a></div>
<div class="hidden isNurse">Nurse <a href="#" class="remove" rel="Patient">remove</a></div>
</body>​

Mise à JOUR: Voici la solution finale. Merci à Patrick et Simen.

120voto

user113716 Points 143363

Ajoutez cette ligne à votre change gestionnaire d'événements

    $("#theSelect option:selected").attr('disabled','disabled')
        .siblings().removeAttr('disabled');

Cela va désactiver l'option sélectionnée, et permettre à toute précédemment désactivé les options.

EDIT:

Si vous ne souhaitez pas activer de nouveau le précédent, il suffit de supprimer cette partie de la ligne:

        .siblings().removeAttr('disabled');

EDIT:

http://jsfiddle.net/pd5Nk/1/

Pour réactiver lorsque vous cliquez sur supprimer, ajouter ceci à votre gestionnaire de clic.

$("#theSelect option[value=" + value + "]").removeAttr('disabled');

6voto

Simen Echholt Points 6354

Cela permettra d'activer/désactiver les options lorsque vous sélectionnez/supprimer, respectivement.

$("#theSelect").change(function(){          
    var value = $(this).val();
    if (value === '') return;
    var theDiv = $(".is" + value);

    var option = $("option[value='" + value + "']", this);
    option.attr("disabled","disabled");

    theDiv.slideDown().removeClass("hidden");
    theDiv.find('a').data("option",option);
});


$("div a.remove").click(function () {     
    $(this).parent().slideUp(function() { $(this).addClass("hidden"); });
    $(this).data("option").removeAttr('disabled');
});

Démo: http://jsfiddle.net/AaXkd/

4voto

jeanreis Points 481

Cela semble fonctionner:

$("#theSelect").change(function(){          
    var value = $("#theSelect option:selected").val();
    var theDiv = $(".is" + value);

    theDiv.slideDown().removeClass("hidden");
    //Add this...
    $("#theSelect option:selected").attr('disabled', 'disabled');
});


$("div a.remove").click(function () {     
    $(this).parent().slideUp(function() { $(this).addClass("hidden"); });
    //...and this.
    $("#theSelect option:disabled").removeAttr('disabled');
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X