2009-12-07 178 views
1

说我有这些填充两个下拉起伏时,我的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> 

现在我需要下渗根据在第一个下拉选择的价值的第二次下降。我无法使用使用数据库回调方法的PHP代码。在我的脚本中我有这样的东西。

$("#Group").change(function() { 
    var groupVal = $(this).find("option:selected").val(); 
    $('#subGroup option').filter(function({return!$(this).val().indexOf(groupVal)!=-1);}).remove(); 
    }); 

该脚本工作正常,它删除所有选项,然后选择一个。但我的问题是,下次我在第一个下拉列表中选择其他值时,第二个下拉列表变为空。我甚至有隐藏/显示所有的工作,但估计他们不会与<select> :(

工作,有没有办法通过时,我选择了第一个下拉一些其他选择,我可以重新填充第二个下拉?

回答

3

如果您正在移除元素,那么您不会收回它们。使用hide()show()就像您一样˚F建议:

$("#Group").change(function() { 
    var groupVal = $(this).find("option:selected").val(); 
    $('#subGroup option').hide(); 
    $('#subGroup option[value^='+groupVal+']').show(); 
}); 

换句话说,每次#Group选择框改变时,隐藏#subGroup所有选项,仅显示其value属性与groupVal开始的。

+0

由于一吨..它的工作..: ),但当我在第一个下拉列表中选择其他选项时,我可以在框中看到较旧的值。一旦我点击第二滴下来就会消失..这怎么能解决.. ?? – shailendra 2009-12-07 19:21:27

+0

我猜你在使用IE?你可以尝试除了'change'之外''click'',但我不会给你任何保证。 – 2009-12-07 19:32:53

+0

我试图绑定两种方式,但它不在IE中工作..它在Mozilla中工作... :( – shailendra 2009-12-07 19:51:10

0

商店当页面加载时第二个选择框到数组中的选项,然后在更改时从该数组中填充选择框 您正在删除第二批“选项”,以便在下一次您想要的时候不再存在使用它们

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>'); 
    }); 
+0

实际上这些下拉是从数据库使用fuego标签填充..下拉列表太大(〜15k)因此不能将每个子组存储为变量.. – shailendra 2009-12-07 19:26:02

+0

但是你已经招致了这些选项的威胁,因为你已经将它们写入html - 这将比压缩的js/json notation对象更加重要。无论如何,你不能隐藏选项,所以如果你需要xbrowser支持你坚持删除追加它们,所以你可以将它们存储在一个simle对象/数组,隐藏的select/div元素中,或者你可以通过改变第一次选择的Ajax调用来使它们变为buld。 – prodigitalson 2009-12-07 20:04:54

相关问题