在这个示例中,我有一系列3个下拉选择框。每个都应用了相同的类(“group-1”),以表明它们是相关的(并允许在同一页上有多个选择组)。将“data-parent”属性应用于select以建立1:1的父/子关系。将“data-parent”属性应用于option以建立多对多的关系。
我的目标是创建一个动态的jQuery代码片段,以便我不必通过id或class显式地识别行为,而是通过选项值和数据父级值来实现。
我的问题:
1.第三个下拉菜单根本没有更新。我以为可能是因为其中一些具有多个data-parent值(用空格分隔),但即使我将它们全部更改为只有一个,它仍然不会随第二个下拉菜单的更改而更新。
2.我不确定如何在第三个下拉菜单的选项中实现“many”data-parent值。拆分字符串,创建数组,并检查该值是否在数组中?
3.当我更改父级下拉菜单时,如何将第二和第三个下拉菜单重置为“默认”值?例如,如果我从第一个选择“Cookies”,则“1 dozen”和“2 dozen”将显示在第二个下拉菜单中。但是,如果我选择“1 dozen”,然后将第一个框更改为“Cakes”,则“1 dozen”仍然被选中,即使在下拉菜单中只有“Sheet”和“Round”可用选项。我想将其重置为默认值(“Desserts …”)。
以下是代码,并且这是我的工作jsfiddle:https://jsfiddle.net/rwh4z623/20/。
我的目标是创建一个动态的jQuery代码片段,以便我不必通过id或class显式地识别行为,而是通过选项值和数据父级值来实现。
我的问题:
1.第三个下拉菜单根本没有更新。我以为可能是因为其中一些具有多个data-parent值(用空格分隔),但即使我将它们全部更改为只有一个,它仍然不会随第二个下拉菜单的更改而更新。
2.我不确定如何在第三个下拉菜单的选项中实现“many”data-parent值。拆分字符串,创建数组,并检查该值是否在数组中?
3.当我更改父级下拉菜单时,如何将第二和第三个下拉菜单重置为“默认”值?例如,如果我从第一个选择“Cookies”,则“1 dozen”和“2 dozen”将显示在第二个下拉菜单中。但是,如果我选择“1 dozen”,然后将第一个框更改为“Cakes”,则“1 dozen”仍然被选中,即使在下拉菜单中只有“Sheet”和“Round”可用选项。我想将其重置为默认值(“Desserts …”)。
以下是代码,并且这是我的工作jsfiddle:https://jsfiddle.net/rwh4z623/20/。
$(document).ready(function(){
$(".hide").children("option").hide();
$("select").on('change', function(){
var selClass = $(this).attr("class");
var selName = $(this).attr("name");
var selVal = $(this).children("option:selected").val();
$("select."+selClass+"[data-parent='"+selName+"']").each(function(){
$(this).children("option[data-parent='"+selVal+"']").show();
$(this).children("option[data-parent!='"+selVal+"']").hide();
});
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="group-1" name="categories">
<option value="" selected="selected">Please select...</option>
<option value="cookie">Cookies</option>
<option value="cake">Cakes</option>
<option value="icecream">Ice Cream</option>
</select>
<select class="group-1 hide" name="desserts" data-parent="categories">
<option value="" selected="selected">Desserts...</option>
<option value="1-dozen" data-parent="cookie">1 dozen</option>
<option value="2-dozen" data-parent="cookie">2 dozen</option>
<option value="sheet" data-parent="cake">Sheet</option>
<option value="round" data-parent="cake">Round</option>
<option value="pint" data-parent="icecream">Pint</option>
</select>
<select class="group-1 hide" name="flavors" data-parent="desserts">
<option value="" selected="selected">Flavors...</option>
<option value="choc-chip" data-parent="1-dozen 2-dozen">Chocolate Chip</option>
<option value="oatmeal" data-parent="1-dozen 2-dozen">Oatmeal</option>
<option value="yellow" data-parent="sheet round">Yellow</option>
<option value="red-velvet" data-parent="sheet">Red Velvet</option>
</select>
感谢您提前提供的所有帮助!也欢迎提出改进建议。