根据另一个下拉列表停用下拉列表中的选项

时间:2017-04-09 15:27:40

标签: javascript jquery

我正在尝试根据其他下拉选项的选择禁用/删除下拉列表中的选项。 但是我们必须选择的下拉/选择器有一个子下拉列表,主要和子下拉列表都是 共享相同的类和ID,但由于两者都包含在具有不同ID的不同div中,我一直都是 试图访问第二个选择器,但无法访问。 下面是我用于此的js代码;

<script type="text/javascript">
document.getElementById("lvl1").querySelector("select").onchange = function() 
{
    if(this.value=="8"){
        var bikeSizes = document.getElementById("pa_size[]");
        for ( var i = 1; i <8; i++) {
            bikeSizes.options[i].removeAttribute("disabled", "disabled");
        }
        for ( var i = 8; i < 12; i++) {
            bikeSizes.options[i].setAttribute("disabled", "disabled");
        }
    } else {
        var bikeSizes = document.getElementById("pa_size[]");
        for ( var i = 1; i < 8; i++) {
            bikeSizes.options[i].setAttribute("disabled", "disabled");
        }
        for ( var i = 8; i < 12; i++) {
            bikeSizes.options[i].removeAttribute("disabled", "disabled");
        }
    }
    return false;
};
</script>

选择器/下拉列表的html代码是;

           - 选择 -      露营      道路运动      雪上运动      水上运动                                       
 <div id="lvl1" level="1" style="">
 <select data-required="yes" data-type="select" name="product_cat" id="product_cat" class="cat-ajax product_cat wpuf_product_cat_">
 <option value="-1">— Select —</option>
 <option class="level-0" value="8">Bikes</option>
 </select>
 <span data-taxonomy="{&quot;required&quot;:&quot;yes&quot;,&quot;name&quot;:&quot;product_cat&quot;,&quot;exclude_type&quot;:&quot;child_of&quot;,&quot;exclude&quot;:&quot;camping,road-sports,water-sports&quot;,&quot;orderby&quot;:&quot;name&quot;,&quot;order&quot;:&quot;ASC&quot;}"></span>
 </div>

3 个答案:

答案 0 :(得分:0)

我修改了引号然后把它放在onload函数中。此外,removeAttribute没有第二个参数。这对我有用。

<script>
    window.onload = function () {
        document.getElementById("product_cat").onchange = function () {
            if (this.value == "8") {
                var bikeSizes = document.getElementById("pa_size[]");
                for (var i = 1; i < 8; i++) {
                    bikeSizes.options[i].removeAttribute("disabled");
                }
                for (var i = 8; i < 12; i++) {
                    bikeSizes.options[i].setAttribute("disabled", "disabled");
                }
            } else {
                var bikeSizes = document.getElementById("pa_size[]");
                for (var i = 1; i < 8; i++) {
                    bikeSizes.options[i].setAttribute("disabled", "disabled");
                }
                for (var i = 8; i < 12; i++) {
                    bikeSizes.options[i].removeAttribute("disabled");
                }
            }
            return false;
        };
    }
</script>


<!-- my test html  -->

<div id="lvl1" level="1" style="">
    <select data-required="yes" data-type="select" name="product_cat" id="product_cat" class="cat-ajax product_cat wpuf_product_cat_">
        <option value="-1">— Select —</option>
        <option class="level-0" value="8">Bikes</option>
    </select>
    <span data-taxonomy="{&quot;required&quot;:&quot;yes&quot;,&quot;name&quot;:&quot;product_cat&quot;,&quot;exclude_type&quot;:&quot;child_of&quot;,&quot;exclude&quot;:&quot;camping,road-sports,water-sports&quot;,&quot;orderby&quot;:&quot;name&quot;,&quot;order&quot;:&quot;ASC&quot;}"></span>

<select id="pa_size[]">
    <option value="-1">--Select--</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
    <option value="5">5</option>
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>
    <option value="9">9</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
</select>
  </div>

答案 1 :(得分:0)

根据我在您网站上看到的内容,这是另一种解决方案:

   <script>

        var group1 = [ { value:"33", text:"Small Unisex"},
         { value:"34", text:"Large Unisex"},
         { value:"35", text:"XL Unisex"},
         { value:"36", text:"Small Womens"},
         { value:"37", text:"Medium Womens"},
         { value:"38", text:"Large Womens"},
         { value:"39", text:"XL Womens"}];

        var group2 = [{value:"40", text:"Medium"},
        {value:"41", text:"Small"},
        { value:"43", text:"XL"},
        { value:"42", text:"Large"}];


        window.onload = function() {
            document.getElementById("product_cat").onchange = function () {
                var bikeSizes = document.getElementById("pa_size[]");
                bikeSizes.innerHTML = "";
                bikeSizes.appendChild(new Option("--Select--", "-1"));
                bikeSizes.disabled = false;

                if (this.value == "-1") {
                    bikeSizes.disabled = true;
                }
                else if (this.value == "8") {
                    for (var i = 0; i < group1.length; ++i){
                        var opt = new Option(group1[i].text, group1[i].value);
                        bikeSizes.appendChild(opt);
                    }

                } else  {
                    for (var i = 0; i < group2.length; ++i) {
                        var opt = new Option(group2[i].text, group2[i].value);
                        bikeSizes.appendChild(opt);
                    }
                }
                return false;
            };
        }
    </script>

答案 2 :(得分:0)

那么这更接近您的需求吗?这是3个选择框,您只能在第一个具有有效选择后看到第二个框。然后,当第二个有有效选择时,你只能看到第三个。

可用选项取决于其主选择框。

你可以在这里看到http://jsbin.com/nijahoh/edit?html,js,output

    <script>

        var fakeData = {
            group1: [{ value: "group3", text: "3" }, { value: "group4", text: "4" }],
            group2: [{ value: "group5", text: "5" }, { value: "group6", text: "6" }],
            group3: [{ value: "group7", text: "7" }, { value: "group8", text: "8" }],
            group4: [{ value: "group9", text: "9" }, { value: "group10", text: "10" }]

        };


        $(document).ready(function(){

            // first select box change handler
            $("#product_cat").on("change", function () {
                var val = this.value;
                $("#d").val("-1");
                setUpSel($("#d"), val);
                $("#d").trigger("change");
                $("#d").css("display", val=="-1"?"none":"");
            });

            $("#d").on("change", function () {
                var val = this.value;
                $("#c").val("-1");
                setUpSel($("#c"), val);
                $("#c").trigger("change");
                $("#c").css("display", val == "-1" ? "none" : "");
            });

        });
        function setUpSel($sel, group) {
            $sel.html("<option value='-1'>--Select--</option>");
            var selData = fakeData[group];
            $.each(selData, function (i, opt) {
                $sel.append(new Option(opt.text, opt.value));
            });

        }

    </script>