Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery根据上一个选择组的选择筛选下一个选择组_Jquery - Fatal编程技术网

Jquery根据上一个选择组的选择筛选下一个选择组

Jquery根据上一个选择组的选择筛选下一个选择组,jquery,Jquery,因此,我需要一个用户选择三个选择框(所有多选) 这个想法是有许多不同类型的甜点,我没有一个巨大的多选框,而是加入了另外两个多选框来缩小用户点击的范围 在这种情况下,他们首先通过“第1层”,点击饼干,然后第二层应该只显示洒饼干和冰饼干 然后,在“第二层”,如果他们同时选择了洒饼干和冰饼干,那么黑洒饼干和白洒饼干,以及白冰饼干应该出现在“第三层” 我很难弄清楚如何进行过滤并用正确的结果替换html文本 <select id="layer1" multiple="multiple">

因此,我需要一个用户选择三个选择框(所有多选)

这个想法是有许多不同类型的甜点,我没有一个巨大的多选框,而是加入了另外两个多选框来缩小用户点击的范围

在这种情况下,他们首先通过“第1层”,点击饼干,然后第二层应该只显示洒饼干和冰饼干

然后,在“第二层”,如果他们同时选择了洒饼干和冰饼干,那么黑洒饼干和白洒饼干,以及白冰饼干应该出现在“第三层”

我很难弄清楚如何进行过滤并用正确的结果替换html文本

<select id="layer1" multiple="multiple">
  <option my_id=3>Chocolate</option>
  <option my_id=5>Cookie</option>
</select>

<select id="layer2" multiple="multiple">
  <option parent_id=3 my_id=6>Milk Chocolate</option>
  <option parent_id=5 my_id =7>Sprinkled Cookie</option>
  <option parent_id=5 my_id =8>Iced Cookie</option>
</select>

<select id="layer3" multiple="multiple">
  <option parent_id=7 my_id=10 >Dark Sprinked Cookie</option>
  <option parent_id=7 my_id=11 > White Sprinkled Cookie</option>
  <option parent_id=8 my_id=12> White Iced Cookie </option>
</select>
<script>
$( "select" )
  .change(function () {
    console.log($(this).attr('id')); //tells me the layer i think
    nextlayerstuff = //get the next layer somehow 
    options = $(nextstuff).filter(not sure what to do here).html()
    //somehow display the new select options for the next layer
</script>

巧克力
曲奇
牛奶巧克力
洒饼干
冰镇饼干
黑松饼
洒白饼干
白色冰镇饼干
$(“选择”)
.改变(功能){
console.log($(this.attr('id'));//告诉我我认为的层
nextlayerstuff=//以某种方式获取下一层
options=$(nextstuff).filter(不确定在这里做什么).html()
//以某种方式显示下一层的新选择选项

一个有趣的场景。两个指针:您需要首先缓存所有值,并相应地添加或删除这些值。您可能应该将父选项和子选项关联起来(而不仅仅依赖于相关的父选项和子选项)。将这些ID移动到数据属性而不是自定义属性也可能不是一个坏主意。我已经为您准备了一个演示。代码或多或少都有完整的文档记录

$(“选择”)。每个(函数(){
//缓存所有选项
$(this).data('options',$('option',this));
}).on(‘变更’,功能(e){
var current=此,selected=[];
//查找当前选定项目的所有选定项并选择
//将它们存储在局部变量中
$('option:selected',current).each(函数(){
选中.push($(this.data('id'));
});
//查找依赖于此项的所有选择。
$(“选择”).filter(函数(){
返回$(this.data('dependens-on')==current.id;
}).each(函数({
//搜索缓存的选项并过滤它们
//按所选选项。将它们存储在
//局部变量。
var children=$(this).data('options').filter(函数(){
返回选定的.indexOf($(this).data('parent'))>-1;
});
//清空并使用
//过滤结果。同时,触发下一个
//选择以使效果级联。
$(this.empty().append(children.trigger('change');
});
}).trigger('change');//触发更改以进行筛选
//页面加载时。

巧克力
曲奇
牛奶巧克力
洒饼干
冰镇饼干
黑松饼
洒白饼干
白色冰镇饼干

谢谢,如果我有进一步的问题,我会发布一篇后续文章。那么你知道我如何动态调整选择列表的大小吗?默认情况下,框很小,但我希望它在元素很多时变大,在元素不多时变小。@user3916997我想你可以。我认为这是不可取的,但你可以计算孩子和孩子将高度设置为该值与某些因素的乘积。您好,谢谢您的建议。我有一个问题,为什么从属选项总是自动选择最后一个选项?如何将其更改为在最后一个选项上具有第一个选项?注意。@Aker666很遗憾,我无法复制您所描述的内容。这种情况是否发生在特定的b上rowser/操作系统?