我有<select>
个<option>
个。{每个都有一个独特的价值。我需要禁用具有给定定义值(不是innerhtml)的<option>
。
任何人都知道如何?
答案 0 :(得分:72)
使用纯Javascript,您必须遍历每个选项,并单独检查它的值。
// 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 ;
}
不启用非目标元素:
// 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;
}
}
使用jQuery,您只需一行即可完成此操作:
$("option[value='stackoverflow']")
.attr("disabled", "disabled")
.siblings().removeAttr("disabled");
不启用非目标元素:
$("option[value='stackoverflow']").attr("disabled", "disabled");
请注意,此不不区分大小写。 “StackOverflow”不等于“stackoverflow”。要获得不区分大小写的匹配,您必须遍历每个,将值转换为小写,然后检查:
$("option").each(function(){
if ($(this).val().toLowerCase() == "stackoverflow") {
$(this).attr("disabled", "disabled").siblings().removeAttr("disabled");
}
});
不启用非目标元素:
$("option").each(function(){
if ($(this).val().toLowerCase() == "stackoverflow") {
$(this).attr("disabled", "disabled");
}
});
答案 1 :(得分:3)
为选项设置一个id然后按id使用get元素,并在选择x值时禁用它..
示例
<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>
答案 2 :(得分:1)
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');
}
});
}
这里有JQ ..如果有人搜索它
答案 3 :(得分:0)
我还想给您一个禁用具有给定定义值(<option>
)的not innerhtml
的想法。我推荐使用jQuery
以获得最简单的方法。请参阅下面的示例。
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
此处的想法是当前Printed
为Status
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;
您可以在这里看到它的工作原理:
答案 4 :(得分:0)
由于某些原因,其他答案不必要地复杂,因此在纯JavaScript中很容易在一行中完成它:
Array.prototype.find.call(selectElement.options, o => o.value === optionValue).disabled = true;
或
selectElement.querySelector('option[value="'+optionValue.replace(/["\\]/g, '\\$&')+'"]').disabled = true;
性能取决于选项的数量(选项越多,第一个越慢)以及是否可以从第二个中忽略escaping(调用replace
)。另外,第一个使用{11}和箭头功能,这些功能在IE11中不可用。
答案 5 :(得分:-2)
<select class="pets">
<option>Cat</option>
<option>Dog</option>
<option>Horse</option>
</select>
$(document).ready(function() {
$('.pets').children().each(function(index, element) {
if ($(element).text() == "Dog") {
$(this).prop('disabled', true);
}
});
});
答案 6 :(得分:-3)
您也可以使用此功能
function optionDisable(selectId, optionIndices)
{
for (var idxCount=0; idxCount<optionIndices.length;idxCount++)
{
document.getElementById(selectId).children[optionIndices[idxCount]].disabled="disabled";
document.getElementById(selectId).children[optionIndices[idxCount]].style.backgroundColor = '#ccc';
document.getElementById(selectId).children[optionIndices[idxCount]].style.color = '#f00';
}
}