2013-08-07 126 views
2

我見過這麼多不同的職位,屬於我的情況,但我仍然在學習服務器端和JS代碼,所以我只是不明白如何將其應用於我的問題呢。填寫jQuery的選擇下拉列表與多個列表

我正在嘗試構建訂單來選擇襯衫/服飾以獲得絲網印刷。由於我已經遇到了問題,我還沒有完整的代碼,但這裏有一個基本的標記:(請記住,我計劃在最終選擇的貨幣價值上投入價格估算計算器與其他部分的形式後,我認爲這部分出)

我不知道如何填充第三和第四個下拉,我已經可以告訴我的jquery標記,if($(this).val() == "100% Polyester/100% Cotton")等將開始重複一遍。

HTML:

`    <form> 
       <select name="garment"> 
        <option selected>Choose An Option</option> 
        <option>Short Sleeve T-Shirts</option> 
        <option>Hoodies/Sweatshirts</option> 
        <option>Long Sleeve T-Shirts</option> 
        <option>Tank Tops</option> 
        <option>Shorts &amp; Pants</option> 
        <option>Hats &amp; Accessories</option> 
       </select> 
       <select name="type"> 
        <option selected disabled>Choose an Option</option> 
       </select> 
       <select name="style"> 
        <option selected disabled>Choose an Option</option> 
       </select> 
       <select name="color"> 
        <option selected disabled>Choose a Color</option> 
       </select> 
      </form>` 

的jQuery:

 `$(document).ready(function() { 

    $garment = $("select[name='garment']"); 
    $type = $("select[name='type']"); 
    $style = $("select[name='style']"); 

    $garment.change(function() { 

    if($(this).val() == "Short Sleeve T-Shirts") { 
     $("select[name='type'] option").remove(); 
     $("<option>100% Cotton</option>").appendTo($type); 
     $("<option>Blended</option>").appendTo($type); 
     $("<option>100% Polyester/Athletic</option>").appendTo($type); 
    } 
    if($(this).val() == "100% Cotton") { 
     $("select[name='style'] option").remove(); 
     $("<option>Regular Fit</option>").appendTo($style); 
     $("<option>Premium Slim/Fashion Fit</option>").appendTo($style); 
     $("<option>Women's Cut</option>").appendTo($style); 
    } 
    if($(this).val() == "Blended") { 
     $("select[name='style'] option").remove(); 
     $("<option>Regular Fit</option>").appendTo($style); 
     $("<option>Premium Slim/Fashion Fit</option>").appendTo($style); 
     $("<option>Women's Cut</option>").appendTo($style); 
    } 
    if($(this).val() == "100% Polyester/Athletic") { 
     $("select[name='style'] option").remove(); 
     $("<option>Men's</option>").appendTo($style); 
     $("<option>Women's</option>").appendTo($style); 
    } 

    }); 
    });` 
+0

使用AJAX無論是通過你舒服jQuery或其他一些庫? – jeremysawesome

+0

你可以看看這個圖書館。看起來你想要推出自己的分面搜索實現。這已經爲您設置了所有設置:http://eikes.github.io/facetedsearch/。 – jeremysawesome

+0

以前沒有使用它,從我讀過的其他/類似的文章使用ajax,我需要把變量數據放入數據庫並從中拉出? – Potatrick

回答

1

在這裏你去:

http://plnkr.co/edit/ETLLOaRFojk3wKoCODVg?p=preview

請注意,您只需要編輯linkedDropdowns陣列,一切將只是工作:

var linkedDropdowns = { 
    "garment": { 
    "Short Sleeve T-Shirts": ["100% Cotton", "Blended", "Polyester/Athletic"], 
    }, 
    "type": { 
    "100% Cotton": ["Regular Fit", "Premium Slim/Fashion Fit", "Women's Cut"], 
    "Blended": ["Regular Fit", "Premium Slim/Fashion Fit", "Women's Cut"], 
    "100% Polyester/Athletic": ["Men's", "Women's"] 
    }, 
    "style": null 
}; 
$(function() { 

    var dropdownNames = Object.keys(linkedDropdowns); 

    dropdownNames.forEach(function(dropdownName) { 

     var curIndex = dropdownNames.indexOf(dropdownName); 
     if (curIndex === dropdownNames.length - 1) 
     return; 

     var curDropdown = $("select[name='" + dropdownName + "']"); 
     var nextDropdown = $("select[name='" + dropdownNames[curIndex+1] + "']"); 
     var nextOptions = linkedDropdowns[dropdownName];  

     curDropdown.change(function() { 

      nextDropdown.find('option').remove().end(); 
      nextOptions[$(this).val()].forEach(function(curType) { 
       $("<option>" + curType + "</option>").appendTo(nextDropdown); 
      }); 
     }); 

    }); 
}); 
+0

老兄...真棒。非常感謝。儘管有一個問題,當我接觸到最終選擇時,我應該在哪裏應用值?我需要具有適用於應用下一部分的價值。 – Potatrick

+0

嘿,我編輯了這個帖子來重構代碼,現在你只需要編輯一個數組。至於你上面的問題,你能澄清一下嗎?爲什麼你不能只使用jquery讀取最終下拉菜單的值? – Jonah

+0

通過使用這種方法得到了一個新的問題,我該如何區分何時文本在不同變量中相同?即當「100%棉」下降超過一個時,var linkedDropdowns = { 「服裝」:{ 「短袖T恤」:[「Regular Fit」,「Premium Slim/Fashion Fit」,「Women's 100%Polyester/Athletic「], }, 」type「:{ 」Regular Fit「:[」100%Cotton「,」Blends「], 」Premium Slim/Fashion Fit「 「100%棉」,「混紡」,「V領」], 「女式剪裁」:[「100%棉」,「混合」], 「100%滌綸/運動」:[「Men's」,「 「], }, 」style「:null };' – Potatrick

-1

如果我理解正確這看起來你需要關係數據。而不是列表使用文檔。

例如

{ 
    "type":"Short Sleeve T-Shirts", 
    "subtypes":[ 
    "100% Cotton", 
    "100% Polyester/Athletic", 
    "Blended" 
    ], 
    "colors":[ 
    "Blue", 
    "Black", 
    "Red" 
    ] 
} 

,或者如果信息是嵌套

{ 
    "type": "Short Sleeve T-Shirts", 
    "subtypes": 
    [ 
    { 
     "name":"100% Cotton", 
     "colors":[ 
     "Blue", 
     "Black", 
     "Red" 
     ] 
    }, 
    { 
     "name":"100% Polyester/Athletic", 
     "colors":[ 
     "Purple", 
     "Green", 
     "Orange" 
     ] 
    } 
    ] 

} 

,如果你限制使用jQuery但是這會變成一個頭痛的,我不知道。

你有沒有考慮過使用MV *框架,如angular

+0

如果你打算倒計時,然後評論一個理由。否則我不知道你爲什麼低估了我。 – blockloop

+0

我接受所有建議。 angular.js有什麼好處?我從來沒有用過它。 – Potatrick

+0

angularjs是一個MV *框架,它可以爲您的js數據綁定到您的html。 Angular是一個流行的解決方案,我非常喜歡。 這裏的基本概念視頻[youtube](http://www.youtube.com/watch?v=uFTFsKmkQnQ) 在該視頻中,他首先向您展示了jquery,然後更改爲angular,以向您展示它們的比較方式。在他們的主頁上有基本的例子http://angularjs.org/ – blockloop