2013-08-07 100 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