J'ai un <select>
avec un certain nombre de <option>
s. Chacun a une valeur unique. Je dois désactiver un <option>
avec une valeur définie donnée (pas innerhtml).
Quelqu'un a une idée de comment?
Avec du Javascript pur, vous devrez parcourir chaque option et vérifier la valeur de celle-ci individuellement.
// Get all options within <select id='foo'>...</select>
var op = document.getElementById("foo").getElementsByTagName("option");
for (var i = 0; i < op.length; i++) {
// lowercase comparison for case-insensitivity
(op[i].value.toLowerCase() == "stackoverflow")
? op[i].disabled = true
: op[i].disabled = false ;
}
Sans activer les éléments non ciblés:
// Get all options within <select id='foo'>...</select>
var op = document.getElementById("foo").getElementsByTagName("option");
for (var i = 0; i < op.length; i++) {
// lowercase comparison for case-insensitivity
if (op[i].value.toLowerCase() == "stackoverflow") {
op[i].disabled = true;
}
}
Avec jQuery, vous pouvez le faire avec une seule ligne:
$("option[value='stackoverflow']")
.attr("disabled", "disabled")
.siblings().removeAttr("disabled");
Sans activer les éléments non ciblés:
$("option[value='stackoverflow']").attr("disabled", "disabled");
Notez que ceci n'est pas insensible à la casse. "StackOverflow" ne sera pas égal à "stackoverflow". Pour obtenir une correspondance insensible à la casse, vous devez parcourir chacun d'eux, convertir la valeur en minuscules, puis vérifier cela:
$("option").each(function(){
if ($(this).val().toLowerCase() == "stackoverflow") {
$(this).attr("disabled", "disabled").siblings().removeAttr("disabled");
}
});
Sans activer les éléments non ciblés:
$("option").each(function(){
if ($(this).val().toLowerCase() == "stackoverflow") {
$(this).attr("disabled", "disabled");
}
});
Définissez un id pour l'option, puis utilisez l'élément get par id et désactivez-le lorsque la valeur x a été sélectionnée.
exemple
<body>
<select class="pull-right text-muted small"
name="driveCapacity" id=driveCapacity onchange="checkRPM()">
<option value="4000.0" id="4000">4TB</option>
<option value="900.0" id="900">900GB</option>
<option value="300.0" id ="300">300GB</option>
</select>
</body>
<script>
var perfType = document.getElementById("driveRPM").value;
if(perfType == "7200"){
document.getElementById("driveCapacity").value = "4000.0";
document.getElementById("4000").disabled = false;
}else{
document.getElementById("4000").disabled = true;
}
</script>
var vals = new Array( 2, 3, 5, 8 );
select_disable_options('add_reklamaciq_reason',vals);
select_disable_options('add_reklamaciq_reason');
function select_disable_options(selectid,vals){
var selected = false ;
$('#'+selectid+' option').removeAttr('selected');
$('#'+selectid+' option').each(function(i,elem){
var elid = parseInt($(elem).attr('value'));
if(vals){
if(vals.indexOf(elid) != -1){
$(elem).removeAttr('disabled');
if(selected == false){
$(elem).attr('selected','selected');
selected = true ;
}
}else{
$(elem).attr('disabled','disabled');
}
}else{
$(elem).removeAttr('disabled');
}
});
}
Ici avec JQ .. si quelqu'un le recherche
Je voudrais vous donner aussi l’idée de désactiver un <option>
avec une valeur définie donnée (not innerhtml
). Je le recommande avec jQuery
pour obtenir le moyen le plus simple. Voir mon échantillon ci-dessous.
[~ # ~] html [~ # ~]
Status:
<div id="option">
<select class="status">
<option value="hand" selected>Hand</option>
<option value="simple">Typed</option>
<option value="printed">Printed</option>
</select>
</div>
Javascript
L'idée ici est de savoir comment désactiver l'option Printed
lorsque le courant Status
est Hand
var status = $('#option').find('.status');//to get current the selected value
var op = status.find('option');//to get the elements for disable attribute
(status.val() == 'hand')? op[2].disabled = true: op[2].disabled = false;
Vous pouvez voir comment cela fonctionne ici:
Pour une raison quelconque, les autres réponses sont inutilement complexes, il est facile de le faire en une seule ligne en JavaScript pur:
Array.prototype.find.call(selectElement.options, o => o.value === optionValue).disabled = true;
ou
selectElement.querySelector('option[value="'+optionValue.replace(/["\\]/g, '\\$&')+'"]').disabled = true;
Les performances dépendent du nombre d'options (plus il y a d'options, plus la première est lente) et si vous pouvez omettre échappement (l'appel replace
) de la seconde. Le premier utilise également Array.find
et les fonctions flèches qui ne sont pas disponibles dans IE11.