我有两个选择菜单。一个名为#c1,一个名为#c2。 #c2被隐藏,并且在选择c1中的选项(任何选项)时将显示。这很好用,但是由于我对Javascript / jQuery的了解有限,我想要一个小的调整,我似乎无法弄清楚。
当选择#c1的选项“meta”时,我想像其他任何选项一样显示#c2,但我希望#c2有一个aditional选项。
E.g。
<select id="c1">
<option>Option 1</option>
<option>Option 2, etc.</option>
<option>Metadata</option>
</select>
<select id="c2">
<option>Option 1</option>
<option>Option 2, etc.</option>
<option>Metadata</option> // This should be shown only when "metadata" in #c1 is selected and hidden when not.
</select>
我遇到的一个问题是使用CSS很难隐藏选项而我的JS知识有限。解决方案是here,但我无法将其转化为我想要的链式选择。
我在这里创建了一个Fiddle,因此您可以看到所有选择框和当前的JS。
答案 0 :(得分:0)
我不确定这是最好的方法,但我想它会起作用:
var optionsArray = [{'key':'1','value':'val1','text':'Option 1'},
{'key':'2','value':'val2','text':'Option 2, etc.'},
]; // Array of the #2 Options without the metadata
$('select[name="c1"]').change( function() {
// Put your show/hide code here
$('select[name="c2"] option').remove();// remove all the c2 options (In case there is already metadata)
$.each(optionsArray, function(i){ //add all the basic options
$('select[name="c2"]').append($("<option></option>")
.attr("value",optionsArray[i]['value'])
.text(optionsArray[i]['text']));
});
var valSelect1 = $(this).val();
if (valSelect1 == 'Metadata'){ // add metadata only if the c1 option is metadata
$('select[name="c2"]').append('<option value="Metadata">Metadata</option>');
}
});
希望它会有所帮助