2012-03-02 309 views
1

選定的選項我有兩個選擇與它相同的元素(選項)。 我想要做的是,當用戶從第一個選擇框中選擇一個值時,第二個選擇框隱藏該選項,並且如果所選選項與第一個選擇中的選項相同,則自動選擇第一個可見選項。選擇:隱藏在輔助選擇

我知道:first選擇一組「物」的第一要素,而:visible只能選擇「可見」的人,所以我的想法是使用:visible:first應該工作,但是我所得到的是沒有選擇。

如果刪除:visible它的工作原理,除非第二個選擇框具有第一要素選擇,用戶選擇第一個選擇框的第一個元素

這是我到目前爲止,請記住我曾嘗試以任意組合:first:visible,但我真的覺得這裏的問題是,「躲還沒有完成它的工作,當我使用:visible

$('#style_position').change(function(){ 
    var sel_pos_id  = $(this).val(); 
    var sel_xtr_pos_id = $('#style_position_extra').val(); 
    $('#style_position_extra option[value=' + sel_pos_id + ']').hide().siblings().show(); 
    if(sel_pos_id==sel_xtr_pos_id){ 
     $('#style_position_extra option') 
      .removeAttr('selected') 
      .filter(':visible') //I also tried find(':visible') 
      .filter(':first')  //I also tried find(':first') 
       .attr('selected','selected'); 
    } 
}); 
+3

不使用的選項隱藏()IE不支持它,現在的問題變成W中選擇相同的選項如果他們被刪除,你需要回到選項 – charlietfl 2012-03-02 20:10:02

+0

從列表中刪除項目。隱藏它是行不通的。 – 2012-03-02 20:11:32

+0

我回答了一段時間的類似問題,它對你的要求略有不同,但也許會有所幫助 - http://stackoverflow.com/questions/8834461 – 2012-03-02 20:13:30

回答

1

這裏有一個方法

/* cache a set of options from second select*/ 
var $opts=$('#style_position_extra option').clone(); 

$('#style_position').change(function(){ 
    var sel_pos_id  = $(this).val(); 
    /* find matching option copy*/ 
    var $newOpts=$opts.filter(function(){ 
      return this.value !=sel_pos_id;            
    }).clone(); 
    /* replace exisiting options with match*/ 
    $('#style_position_extra').html($newOpts); 
}); 

這裏的另一個可能是簡單的一個

$('#style_position').change(function(){ 
    var selected=$(this).find('option').not(':selected').clone(); 
    $('#style_position_extra').html(selected); 
}); 
+0

尼斯,去測試它現在 – Fabrizio 2012-03-02 20:18:43

+0

一些小的改動:' '#style_position_extra options'應該是'' #style_position_extra option''和THIS.VALUE == sel_pos_id;'應該是'THIS.VALUE = sel_pos_id;'!我必須在其他瀏覽器上測試它,看看它是否保持選定的元素,但它似乎在鉻 – Fabrizio 2012-03-02 20:22:42

+0

OK ..我有概念倒退,我有一個壞習慣多元化「選項」 – charlietfl 2012-03-02 20:25:59

0

感謝charlietfl我想通了,這裏是最後的答案:

$('#style_position').change(function(){ 
    var sel_pos_id  = $(this).val(); 
    var sel_xtr_pos_id = $('#style_position_extra').val(); 

    var selected=$(this).find('option').not(':selected').clone(); 
    $('#style_position_extra').html(selected) 
    if(sel_pos_id!=sel_xtr_pos_id){ 
     $('#style_position_extra option[value=' + sel_xtr_pos_id + ']').attr('selected','selected'); 
    } 
}); 

該代碼會自動選擇不同的選項,如果這兩個選擇都相同的選項,或將保持在第二個選擇框