2012-03-28 90 views
0

我在尋找解決這個問題的最佳方案。我有一個簡單的商店邏輯問題。有2個選擇元素,大小顏色。我想讓它們對數據有依賴性(現在它是示例數據,但後來它會來自數據庫) - 大小將決定哪些顏色選項對客戶可見(隱藏不必要的選項)。jquery窗體onchange選擇值變化

第一個問題是,當我進行更改事件時,我想隱藏默認顯示的元素準備文檔,它仍然可見(我不得不改變顏色不同於打開下拉菜單,它不會是可見的然後)。

其次,我正在尋找最靈活的解決方案,因爲我對我有疑慮。這裏的代碼:

 var rozmiar = new Array("S", "M", "L", "XL", "XXL"); 
    var kolor = new Array("Czerwony", "Niebieski", "Zielony", "Biały", "Czarny"); 
    var opcje = new Array(rozmiar, kolor); 

     $(document).ready(function(){ 
     $('.form1').change(function(){ 
       $('.form2 option').show(); 

       var selectSelector = function(z){ 
        selectSelector = $('select.form2 option[value='+kolor[z]+']').hide(); 
       }; 

       wybranyRozmiar = $(this).val(); 
        if(wybranyRozmiar == rozmiar[0]){ 
         selectSelector(0); 
        } 
        if(wybranyRozmiar == rozmiar[1]){ 
         selectSelector(1); 
        } 
        if(wybranyRozmiar == rozmiar[2]){ 
         selectSelector(2); 
        } 
        if(wybranyRozmiar == rozmiar[3]){ 
         selectSelector(3); 
        } 
        if(wybranyRozmiar == rozmiar[4]){ 
         selectSelector(4); 
        } 
      }); 
     }); 
+0

,你會介意分享一些你的代碼? – codef0rmer 2012-03-28 08:21:55

+0

剛剛完成,我還在考慮如何使我的選擇器中的變量變得更短,以使它更短 – Malyo 2012-03-28 08:30:51

+0

@Malyo,請僅發佈相關代碼,而不是所有內容 – Starx 2012-03-28 08:35:55

回答

1

我回答了我理解的唯一部分。

而不是使用多個if語句可以使用開關

switch(selectsize) { 
    case rozmiar[1]: 
     $('select.form2 option[value='+color[2]+']').hide(); 
     break; 
    //case <another>" 
     //break; 
} 
+0

我正在考慮它,但切換真的更快? – Malyo 2012-03-28 08:42:03

+1

@Malyo,請參考[this](http://stackoverflow.com/a/2923007/295264)。 ;) – Starx 2012-03-28 08:43:39

+0

我還可以在開關內使用比較嗎?像案例(wybranyRozmiar == rozmiar [0]) - 因爲它對我的代碼至關重要 – Malyo 2012-03-28 08:53:12

0

這是我的理解是需要做的。根據.form1中選定的選項索引,從.form2中選擇相應的選項。

$('select.form1').change(function (i) { 
    var selectedIndex = $('select.form1 option:selected').index(); 
    $('select.form2 option:eq(' + selectedIndex + ')').attr('selected', 'selected'); 
}); 

D3m0:http://jsbin.com/azilow