2013-04-18 108 views
2

我有2个选择,我想根据第二个选择的值,从第一个值中删除。例如:如果我从第二个选择中选择值1和2,我希望2,3,4,5的值被隐藏,如果在第二个选择值中是3,我想隐藏1,2,3值:隐藏和显示多个选择

选择一:

<select name="select1"> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
<option value="4">4</option> 
<option value="5">5</option> 
</select> 

选择二:

<select name="select2"> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
</select> 

这是藏在被1或2个的情况下的代码:

var ary=[2,3,4,5]; 
$('[name=select1] option').filter(function(){ 
return ($.inArray(parseInt(this.value),ary) >-1);}).hide(); 

此代码适用于隐藏,但我遇到问题。当代码将2,3,4,5隐藏在值1和2上时,在第二选择中选择值3仅显示值1,因为其他隐藏。我用show()解决了这个问题。然后2,3,4,5的表现,但我不能隐藏值1,因为返回://我尝试这样做,它不会工作:

var ary=[4,5]; 
var ary2=[1]; 
$('[name=select1] option').filter(function(){ 
return ($.inArray(parseInt(this.value),ary) >-1);}).hide()&&($.inArray(parseInt(this.value),arry2) >-1);}).show(); 

我也试图调用另一个函数它会一直刷新select1,显示所有的值,并且在这个函数中只使用了隐藏,我认为这将是正确的方式,但我不知道如何解决它?

+1

我不知道我遵循这个题。你只想显示在'select2'中选择的'select1'中的元素?你能再解释一下吗? –

+0

我认为你可以使用[jQuery级联](http://archive.plugins.jquery.com/project/ cascade),只需切换每个下拉列表中可用的选项集。 – lavrik

+0

@RocketHazmat我只想删除select1上的值。如果选择2上的选定值是1或2我想隐藏值2,3,4,5形式选择1。如果select2上的选定值是3,我想删除值1,2,3。 –

回答

1

小提琴的这个位置:http://jsfiddle.net/8ZuGE/

注意,添加列表项我想可能会多一点效率在这里,但你的想法:

var $resetValues = $('#select1').find("option"); 

$('#select2').on('change', function() { 
    var selected = $("option:selected", this).val(); 
    // Reset select1 
    $('#select1').empty(); 
    $resetValues.each(function() { 
     $('#select1').append($(this)); 
    }); 

    var array; // Hidden values 
    if(selected > 0 && selected < 3) { 
     array = [2,3,4,5]; 
    } else { 
     array = [1,2,3]; 
    } 

    $('#select1 option').filter(function() { 
     return ($.inArray(parseInt($(this).val()), array) != -1); 
    }).remove(); 
}); 
+0

tnx很多男人,你帮了我很多,我开始变得灰白的在我的头上:)我改变了一下你的代码,检查出来:http://jsfiddle.net/8ZuGE/10/ –