Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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
Javascript 基于另一个下拉列表禁用下拉列表中的选项_Javascript_Jquery - Fatal编程技术网

Javascript 基于另一个下拉列表禁用下拉列表中的选项

Javascript 基于另一个下拉列表禁用下拉列表中的选项,javascript,jquery,Javascript,Jquery,我正在尝试根据其他下拉选项的选择禁用/删除下拉列表中的选项。 但是我们必须选择的下拉列表/选择器有一个子下拉列表,主下拉列表和子下拉列表都是 共享相同的类和ID,但由于它们都用不同的ID包装在不同的div中,所以我 正在尝试访问第二个选择器,但无法访问。 下面是我用于此目的的js代码 <script type="text/javascript"> document.getElementById("lvl1").querySelector("select").onchange = fu

我正在尝试根据其他下拉选项的选择禁用/删除下拉列表中的选项。 但是我们必须选择的下拉列表/选择器有一个子下拉列表,主下拉列表和子下拉列表都是 共享相同的类和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>

document.getElementById(“lvl1”).querySelector(“select”).onchange=function()
{
如果(该值=“8”){
var bikeSizes=document.getElementById(“pa_size[]);

对于(var i=1;i我修复了引号,然后将其放入一个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>

window.onload=函数(){
document.getElementById(“product_cat”).onchange=function(){
如果(this.value==“8”){
var bikeSizes=document.getElementById(“pa_size[]);
对于(变量i=1;i<8;i++){
选项[i]。删除属性(“禁用”);
}
对于(变量i=8;i<12;i++){
bikeSizes.options[i].setAttribute(“禁用”、“禁用”);
}
}否则{
var bikeSizes=document.getElementById(“pa_size[]);
对于(变量i=1;i<8;i++){
bikeSizes.options[i].setAttribute(“禁用”、“禁用”);
}
对于(变量i=8;i<12;i++){
选项[i]。删除属性(“禁用”);
}
}
返回false;
};
}
-挑选-
自行车
--挑选--
1.
2.
3.
4.
5.
6.
7.
8.
9
10
11
12
13

根据我在您网站上看到的内容,这里有一个替代解决方案:

   <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>

var group1=[{value:“33”,text:“Small Unisex”},
{值:“34”,文本:“大型男女通用”},
{值:“35”,文本:“XL中性款”},
{值:“36”,文本:“小女人”},
{值:“37”,文本:“中等女性”},
{值:“38”,文本:“大女人”},
{数值:“39”,文字:“XL女性”};
var group2=[{value:“40”,text:“Medium”},
{值:“41”,文本:“小”},
{值:“43”,文本:“XL”},
{值:“42”,文本:“大”}];
window.onload=函数(){
document.getElementById(“product_cat”).onchange=function(){
var bikeSizes=document.getElementById(“pa_size[]);
bikeSizes.innerHTML=“”;
appendChild(新选项(“--Select--”和“-1”);
bikeSizes.disabled=false;
如果(this.value==“-1”){
bikeSizes.disabled=true;
}
否则如果(this.value==“8”){
对于(变量i=0;i
那么这是否更接近您需要的?这是3个选择框,您只能在第一个选择有效后才能看到第二个选择框。然后,您只能在第二个选择有效时才能看到第三个选择框

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

你可以看到它在这里工作


var fakeData={
group1:[{value:“group3”,text:“3”},{value:“group4”,text:“4”}],
组2:[{值:“组5”,文本:“5”},{值:“组6”,文本:“6”}],
组3:[{值:“组7”,文本:“7”},{值:“组8”,文本:“8”}],
组4:[{值:“组9”,文本:“9”},{值:“组10”,文本:“10”}]
};
$(文档).ready(函数(){
//首先选择框更改处理程序
$(“产品”类别)。关于(“更改”,功能(){
var val=该值;
美元(“#d”).val(“-1”);
setUpSel($(“#d”),val);
美元(“#d”)。触发(“变更”);
$(“d”).css(“display”,val==“-1”?“none”:“);
});
$(“#d”)。关于(“更改”,函数(){
var val=该值;
美元(“#c”).val(“-1”);
setUpSel($(“#c”),val);
美元(“#c”)。触发(“变更”);
$(“#c”).css(“display”,val==“-1”?“none”:“);
});
});
功能设置选择($sel,组){
$sel.html(“--Select-->”);
var selData=伪造数据[组];
$.each(selData,function(i,opt){
$sel.append(新选项(opt.text,opt.value));
});
}

很抱歉忘记添加html代码:将html添加到您可以添加的位置…在您的问题下方有一个编辑链接。thnx我将其添加到了Document.getElementById(“lvl1”).querySelector(“选择”).onchange=function(){缺少一个quoteas描述说,我已经尝试过该解决方案,但不知怎么的,它没有发挥应有的作用。因为它应该与从“骑乘类别”中选择任何选项后出现的子下拉列表一起工作"下拉列表。这是url,您可以看到我想要完成的任务:我查看了您的网站以及您如何使用上述代码。它不会起作用。隐藏选项元素仅在某些浏览器中有效,大多数浏览器会忽略它。今晚我将再看一看。我正在工作,非常感谢您的支持,期待您的支持输入一个问题,选择什么应该是可见的
   <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>
    <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>