You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于现有代码扩展的三级联动下拉菜单两类故障求助

三级联动下拉菜单问题修复方案

问题梳理

  • 无论选择哪个state或store,第三级organiser下拉菜单始终显示相同选项
  • 切换state时,organiser下拉菜单不会重置为默认的“Select the organiser”

问题原因及修复步骤

  1. 中文引号导致DOM选择失败
    代码里的$(“.subcat”)和$(“.organiser”)用了中文引号,jQuery无法正确匹配元素,导致organiser的筛选逻辑完全没生效。把所有中文引号替换成英文引号即可。

  2. state切换时未重置organiser
    当前state的change事件只处理了store下拉的重置,没有同步处理organiser。需要在state变更时,给organiser也加上重置逻辑:清空选中值、隐藏所有选项、禁用控件。

  3. (可选)补充其他store对应的organiser选项
    目前organiser里只有ma_store_1的选项,其他store选中后没有对应内容,可根据需求添加更多org="对应store值"的option。

修复后完整代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.js"></script>
</head>

<body>
        <style type="text/css">
            .subcat option {
                display: none;
            }
            .subcat option.label {
                display: inline;
            }
            .organiser option {
                display: none;
            }
        </style>
<script> 
            function goToNewPage()
          {
            var url = document.getElementById('organiser').value;
            console.log(url);
            if(url != 'none') {
              window.location = url;
            }
          }
          </script>
<script type="text/javascript">
$(function(){
    
    var $cat = $("#state"),
        $subcat = $(".subcat"),
        $organiser = $(".organiser");
    
    $cat.on("change",function(){
        var _rel = $(this).val();
        // 重置store
        $subcat.find("option").attr("style","").hide();
        $subcat.val("");
        // 重置organiser
        $organiser.find("option").attr("style","").hide();
        $organiser.val("");
        $organiser.prop("disabled",true);
        
        if(!_rel) {
            $subcat.prop("disabled",true);
            return;
        }
        $subcat.find("[rel="+_rel+"]").show();
        $subcat.prop("disabled",false);
    });
    
    $subcat.on("change",function(){ 
        var _org = $(this).val(); 
        $organiser.find("option").attr("style","").hide(); 
        $organiser.val(""); 
        if(!_org) {
            $organiser.prop("disabled",true);
            return;
        }
        $organiser.find("[org="+_org+"]").show();
        $organiser.prop("disabled",false); 
    });
            
});
</script>
<form id="formname" name="Sate-Store">
    
                    <select name="state" id="state">
                        <option value="">Select state</option>
                        <option value="ma">MA</option>
                        <option value="me">ME</option>
                        <option value="nh">NH</option>
                    </select>
                    <select disabled="disabled" class="subcat" id="store" name="store">
                        <option value>Select a store</option>
                        <!-- MA -->
                        <option rel="ma" value="ma_store_1">MA Store 1</option>
            <option rel="ma" value="ma_store_2">MA Store 2</option>
                        <option rel="ma" value="ma_store_3">MA Store 3</option>
                        <option rel="ma" value="ma_store_4">MA Store 4</option>
                        <option rel="ma" value="ma_store_5">MA Store 5</option>
                        <!-- ME -->
                        <option rel="me" value="me_store_1">ME Store 1</option>
                        <option rel="me" value="me_store_2">ME Store 2</option>
                        <option rel="me" value="me_store_3">ME Store 3</option>
                        <option rel="me" value="me_store_4">ME Store 4</option>
                        <option rel="me" value="me_store_5">ME Store 5</option>
                        <!-- NH -->
                        <option rel="nh" value="nh_store_1">NH Store 1</option>
                        <option rel="nh" value="nh_store_2">NH Store 2</option>
                        <option rel="nh" value="nh_store_3">NH Store 3</option>
                        <option rel="nh" value="nh_store_4">NH Store 4</option>
                        <option rel="nh" value="nh_store_5">NH Store 5</option>
                    </select>
                                        <select disabled="disabled" class="organiser" id="organiser" name="organiser">
                                            <option value>Select the organiser</option>
                                            <!-- MA Store 1 -->
                                            <option org="ma_store_1" value="https://test.com/">Jack</option>
                                            <option org="ma_store_1" value="James">James</option>
                                            <option org="ma_store_1" value="Frank">Frank</option>
                                            <!-- MA Store 2 示例 -->
                                            <option org="ma_store_2" value="https://example.com/">Alice</option>
                                            <!-- ME Store 1 示例 -->
                                            <option org="me_store_1" value="Bob">Bob</option>
                                        </select>

          <input type=button value="Go" onclick="goToNewPage()" />

    </form>

</body>
</html>

额外说明

  • 给organiser也加了默认隐藏所有option的CSS,和store保持一致的样式逻辑
  • 修正了原代码中MA Store 2的value错误(原先是外部链接,改成了store标识),方便关联organiser
  • 补充了几个不同store对应的organiser示例选项,测试时可以看到不同store对应不同选项

内容的提问来源于stack exchange,提问作者FlyBoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:10:30