我有两个选择选项,如下所示。
<div class="wrapper">
<select id="industrySelect" class="chosen-industry-select" data-placeholder="select industry" multiple>
<option value=""></option>
<option value="1">Business</option>
<option value="2">Education</option>
<option value="3">Healthcare</option>
</select>
<select id="verticalMarketSelect" class="chosen-verticalMarket-select" data-placeholder="select vertical market" multiple>
<option value=""></option>
<option value="1" industryValue="1">Retail</option>
<option value="2" industryValue="1">Construction</option>
<option value="3" industryValue="1">Automotive</option>
<option value="4" industryValue="2">University</option>
<option value="5" industryValue="2">Elementary School</option>
<option value="6" industryValue="2">High School</option>
<option value="7" industryValue="3">Hospital</option>
<option value="8" industryValue="3">Doctor Office</option>
<option value="9" industryValue="3">Dentist</option>
</select>
</div>
industryValue
只是我为过滤目的而创建的属性,因为选择的信息是从两个不同的SQL表中提取的。 industryValue
与[{1}}的选项中指出的值直接相关(即,industryValue =“1”与选择 Business 的值相关。
我想要完成的是,如果从上面的verticalMarketSelect
中选择了相应的选项,则只显示verticalMarketSelect
中的选项。如果未选择任何选项,则industrySelect
的选项不应显示。
编辑:我忘记了非常重要信息:我使用的是jQuery Chosen插件,两个选项都是多选。
编辑:我从类似的实现中找到了一些jQuery,但它似乎并不能满足我的需求。
verticalMarketSelect
答案 0 :(得分:0)
通常,您可以使用.hide()
,但似乎隐藏<option>
元素在每个浏览器中都不起作用,因此您首先需要保存完整列表,然后删除不符合您查询的元素,并设置.html()
的{{1}}:
<select>
答案 1 :(得分:0)
HTML:
<div style="display:none;" id = "sublist">
<option value="1" industryValue="1">Retail</option>
<option value="2" industryValue="1">Construction</option>
<option value="3" industryValue="1">Automotive</option>
<option value="4" industryValue="2">University</option>
<option value="5" industryValue="2">Elementary School</option>
<option value="6" industryValue="2">High School</option>
<option value="7" industryValue="3">Hospital</option>
<option value="8" industryValue="3">Doctor Office</option>
<option value="9" industryValue="3">Dentist</option>
</div>
使用Javascript:
$('#industrySelect').change(function(){
$('#verticalMarketSelect').empty();
$('#verticalMarketSelect').append($('#sublist').find('option[industryValue="' + $(this).val()+'"]'));
});
以下是DEMO
答案 2 :(得分:0)
我能够让这个工作,并希望确保为其他任何可能希望将来实现类似功能的人发布答案。谢谢大家的帮助!
jQuery('#industrySelect').chosen().change(function() {
var industrySelected = jQuery(this).chosen().val();
var $verticalMarket = jQuery('select#verticalMarketSelect');
var $verticalMarketHolder = jQuery('select#verticalMarketHolder');
if (industrySelected == null) {
$verticalMarket.empty();
} else {
$verticalMarket.find('option.existing').removeClass('existing');
jQuery.each(industrySelected, function(index, value) {
$verticalMarket.find('[industry="' + value + '"]').addClass('existing');
});
$verticalMarket.find('option').not('.existing').remove();
jQuery.each(industrySelected, function(index, value) {
var option = $verticalMarketHolder.find('[industry="' + value + '"]').clone();
var existingOptions = $verticalMarket.find('[industry="' + value + '"]');
if (existingOptions.length == 0) {
$verticalMarket.append(option);
}
});
}
jQuery('#verticalMarketSelect').trigger('chosen:updated');
});
jQuery(function() {
jQuery('#industrySelect').trigger('change');
});
<div class="wrapper">
<select id="industrySelect" class="chosen-industry-select" data-placeholder="select industry" multiple>
<option value=""></option>
<option value="1">Business</option>
<option value="2">Education</option>
<option value="3">Healthcare</option>
</select>
<select id="verticalMarketSelect" class="chosen-verticalMarket-select" data-placeholder="select vertical market" multiple>
<option value=""></option>
<option value="1" industryValue="1">Retail</option>
<option value="2" industryValue="1">Construction</option>
<option value="3" industryValue="1">Automotive</option>
<option value="4" industryValue="2">University</option>
<option value="5" industryValue="2">Elementary School</option>
<option value="6" industryValue="2">High School</option>
<option value="7" industryValue="3">Hospital</option>
<option value="8" industryValue="3">Doctor Office</option>
<option value="9" industryValue="3">Dentist</option>
</select>
</div>