说我有两个下拉列表,当我的jsp加载时填充
<select id="Group" name="group"> -- first drop down
<option value="0001">1</option>
<option value="0002">2</option>
</select>
<select id="subGroup" name="class"> -- second drop down
<option value="0001-000">A</option> -- sub group associated with option value 001
<option value="0001-010">B</option>
<option value="0001-020">C</option>
<option value="0001-030">D</option>
<option value="0001-040">E/option>
<option value="0002-000">F</option> -- sub group associated with option value 002
<option value="0002-010">G</option>
<option value="0002-020">H</option>
<option value="0002-040">I</option>
</select>
现在我需要根据第一个下拉菜单中的选定值过滤第二个下拉菜单。我不能使用使用DB回调方法的PHP代码。在我的剧本中,我有类似的东西。
$("#Group").change(function() {
var groupVal = $(this).find("option:selected").val();
$('#subGroup option').filter(function( {return!$(this).val().indexOf(groupVal)!=-1);}).remove();
});
脚本工作正常,它会删除所有选项以外的所有选项。但我的问题是,下次当我在第一次下拉中选择其他值时,第二次下拉变为空。我甚至使用了hide / show,但我猜他们不会使用<select>
:(
当我在第一次下拉中选择其他选项时,有什么方法可以重新填充第二次下拉?
答案 0 :(得分:4)
如果要删除元素,则不会将其删除。根据您的建议使用hide()
和show()
:
$("#Group").change(function() {
var groupVal = $(this).find("option:selected").val();
$('#subGroup option').hide();
$('#subGroup option[value^='+groupVal+']').show();
});
换句话说,每次更改#Group
选择框时,都会隐藏#subGroup
中的所有选项,并仅显示value
属性以groupVal
开头的那些选项。
答案 1 :(得分:0)
页面加载时,将第二个选择框的所有选项存储到数组中。然后在更改时填充该数组中的选择框。 您正在删除第二批“选项”,以便下次要使用它们时不再存在这些选项。
答案 2 :(得分:0)
为此,您需要在某处存储所有可用选项,然后从该数据集重新填充。例如
var availableOptions = {
'groupOne': {/* options as {value: '', text: ''} */},
'groupTwo': {/* options as {value: '', text: ''} */}
};
$("#Group").change(function() {
var groupVal = $(this).find("option:selected").val();
var sub = $('#Subgroup');
$.each(availableOptions[groupVal], function(i, data){
sub.append('<option value="'+data+'">'+data.text+'</option>');
});
答案 3 :(得分:0)
还有一个相关的选择框插件由Remy sharp提供,如果您想尝试我已经取得了成功:
http://remysharp.com/2007/09/18/auto-populate-multiple-select-boxes/