2013-04-18 50 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/ –