禁用基于类的选择元素选项
Disable a select element option based on a class
嘿,伙计们刚刚被告知,隐藏不能用于跨浏览器的选择元素选项。
所以我想知道如何使用disable来解决以下问题。
这个例子被简化了,实际的代码包含PHP循环和MySQL来显示选项和内容。
好的,首先我有两个选择元素:
<select class="form-control select-box">
<option value="make-any">Make (Any)</option>
<option value="BMW">BMW</option>
<option value="Mercedes">Mercedes</option>
<option value="Volvo">Volvo</option>
</select>
<select class="form-control select-box-model">
<option value="make-any">Make (Any)</option>
<option value="C220">C220</option>
<option value="X1">X1</option>
<option value="X5">X5</option>
<option value="XC90">XC90</option>
</select>
然后我有这些列表:
<div class="makes BMW X1">
<ul>
<li>BMW</li>
<li>X1</li>
</ul>
</div>
<div class="makes VOLVO XC90">
<ul>
<li>VOLVO</li>
<li>XC90</li>
</ul>
</div>
<div class="makes MERCEDES C220">
<ul>
<li>MERCEDES</li>
<li>C220</li>
</ul>
</div>
<div class="makes BMW X5">
<ul>
<li>BMW</li>
<li>X1</li>
</ul>
</div>
如果所选选项与div的类不匹配,我目前正在使用这个jQuery来隐藏类为"make"的div,例如"BMW":
<script>
$(document).ready(function(){
$('.form-control').change(function(){
var make = $(this).val();
if(make != 'make-any'){
$('.makes').hide();
$('.'+make).show();
} else {
$('.makes').show();
}
});
});</script>
正如你所看到的,我有一点问题,因为类为"选择框模型"的第二个选择元素包含所有模型,我想禁用与第一个选择元素选项无关的选项。
例如,列表容器包含每辆车的"品牌"answers"型号"类别:
<div class="makes BMW X5">
那么,我该如何禁用与"Make"无关的选项呢?例如,如果用户选择宝马作为第一个元素,我只想要与"Make"相关的"Models"。
任何例子都很好,谢谢。
嗯,我不能完全确定我是否理解你的问题。
但我假设你的意思是,如果你从选择一个(form control)
中选择一个汽车品牌,那么可用的车型应该在选择两个select-box-model
中启用。选择模型后,是否需要显示准确的div?
如果这就是你想要做的,那么你的标记并不是实现这一点的最佳结构。
尽管如此,我还是用你的标记做了一个例子:
jQuery:
$('.select-box-model').prop('disabled',true);
$('.form-control').on('change',function(){
$('.select-box-model').prop('disabled',false);
if($(this).val() != 'make-any'){
$('.makes').hide();
//check if the models drop down is used
if($(this).hasClass('select-box-model')){
//get selected value
var value = $(this).val();
$('.'+ value).show();
return false;
}
//get selected value
var carBrand = $(this).val();
$('.select-box-model option').prop('disabled',true);
$('.'+ carBrand).find('li').each(function(){
if($.trim(carBrand) != $.trim($(this).text())){
$('.select-box-model option[value="'+ $(this).text() +'"]').attr("disabled", false);
}
});
}
});
这里有一个小提琴:http://jsfiddle.net/z59v56ec/
实现这一点的一个更整洁的解决方案是使用ajax来填充汽车品牌的模型。
但如果你真的想按照自己的方式来做,那么下面的逻辑会更容易。
- 选择一个有价值的汽车品牌
- 选取两个持有汽车品牌价值的文本为车型
- 选择一将启用选择二中具有该汽车品牌价值的选项
- 在select two中选择一个模型时,将根据选项文本显示准确的div
顺便说一句,小心你的推荐信。沃尔沃与沃尔沃不同。
以防我完全没有抓住要点——对不起!:)
首先,您最好创建多个选择,并根据第一个选择的selected值切换其显示。然后,创建多个div,并根据第二个select的selected值切换它们的显示。也就是说,如果你真的想"动态"攻击这一点,你最好有两个选择-和一个无序列表-并在进行时清除它们的内容和重写html:
<select class="form-control select-box" id="selectMake">
<option value="make-any">Make (Any)</option>
<option value="BMW">BMW</option>
<option value="Mercedes">Mercedes</option>
<option value="Volvo">Volvo</option>
</select>
<select class="form-control select-box-model" id="selectModel">
</select>
<ul id="ulCars">
</ul>
$("#selectMake").change(function(){
$("#selectModel").empty();
$("#ulCars").empty();
switch ($(this).val()){
case "BMW":
$("#selectModel").append("<option>X1</option>").val("X1");
$("#ulCars").append("<li>X1</li>");
break;
}
});
等等。等等,但您可以轻松地清除列表和下拉列表,然后重新填充它们。但正如我所说,我会选择多个div并切换它们的显示。
- WebdriverIO waitForExist()选择元素's选定的选项
- 如何选择元素的第n个子元素
- Angular没有根据模型更新我的选择元素
- jquery使用name from变量按类选择元素
- 如何使用jQuery按数据日期属性选择元素
- 向html选择元素添加选项
- 使用Jquery在相同类型的元素中选择元素
- 他们是如何使用angular/jqLite find()方法按属性名称和值选择元素的?ng conf 2015
- 如何在Angular中清除选择元素中的过滤器
- 使用其中一个元素作为参考点,从Javascript数组中选择元素
- Javascript选择元素到字符串的比较
- Angular始终选择选择元素中的第一个选项
- 使用 jquery .find() 遍历按类和存储属性选择元素
- 通过 id json, jquery 选择元素
- 如何基于另一个已经存在的选择器选择元素
- 禁用多个选择元素中的非“选定”选项,但使用 jquery 的一个除外
- HTML 选择元素的只读等效项
- 在iPad上,如何通过Javascript事件在选择元素上设置focus()而不显示选项
- 单击事件似乎不适用于 IE 中的选择元素
- Angular js,在选择元素上,我想 POST 数据以将其保存在数据库中,然后我想使用 PUT 更新它而无需重新加载