Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.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 将selectedIndex设置为下面的第一个选项和选项组_Javascript - Fatal编程技术网

Javascript 将selectedIndex设置为下面的第一个选项和选项组

Javascript 将selectedIndex设置为下面的第一个选项和选项组,javascript,Javascript,仅使用javaScript(无jQuery)如何将所选索引设置为选项组下面的第一个选项。填充时,每个组下面的选项数是可变的,但是在选项数组中,它们是按顺序编号的,因此很难确定一个组的结束位置和下一个组的开始位置。我有一个变量,它引用了我要使用的组选项id <select id="selectBox"> <optgroup id="optGrp1" label="Group 1"> <optgroup id="optGrp2" label="Group 2"&

仅使用javaScript(无jQuery)如何将所选索引设置为选项组下面的第一个选项。填充时,每个组下面的选项数是可变的,但是在选项数组中,它们是按顺序编号的,因此很难确定一个组的结束位置和下一个组的开始位置。我有一个变量,它引用了我要使用的组选项id

<select id="selectBox">
  <optgroup id="optGrp1" label="Group 1">
  <optgroup id="optGrp2" label="Group 2">
    <option value="1585">option 1 in group 2</option>
    <option value="1589">option 2 in group 2</option>
  </optgroup>
  <optgroup id="optGrp3" label="Group 3">
  <optgroup id="optGrp4" label="Group 4">
</select>

第2组中的选项1
第2组中的选项2

克里斯托弗的第一个答案正是我所需要的。下面是代码的完整示例及其建议:

首先,在我的表单类中调用一个方法来填充列表框

//sample arrays
g.groups = {grpKey1:"label1", grpKey2:"label2"...}
g.options = {grpKey1:{optVal:"optTxt",optVal:"optTxt",...}, 
             grpKey2:{optVal:"optTxt",optVal:"optTxt",...},...}

//a reference to the select box and two arrays are passed to the method 
g.addGroupOptions(document.getElementById("mySelectBox"), g.groups, g.options); 

//this method in my form class populates the list box 
//with group labels and options under each label
this.addGroupOptions = function (selectBox, grpArray, optArray)
{
    for ( var grpKey in optArray )
    {
        var group = document.createElement('optgroup'),
            opt   = document.createElement('option');

        //retrive group label from groups array
        group.id    = grpKey;
        group.label = grpArray[grpKey];

        /*
        loop optArray[grpKey] get each subKey 
        */
        for ( var subKey in optArray[grpKey] )
        {
            opt.text   = optArray[grpKey][subKey];
            opt.value = subKey;
            group.appendChild(opt.cloneNode(true));
        }
    //append option group and subordinate options to list box
    selectBox.appendChild(group);
    }
}
然后应用Kristofer的建议将所选项目设置为所需选项组中的第一个选项

    document.getElementById(document.getElementById( myVariable ).value).getElementsByTagName('option')[0].selected = true;

欢迎来到堆栈溢出!请看一看,仔细阅读,特别是“…选项组下面的第一个选项…”当你说“下面”时,你真的是指“下面”吗?在你的问题中,只有一组人有任何选择。我在那里没有看到我的问题的具体参考?如果你能指出一个,那就太好了。为了让我的例子简单,我没有在其他组下面显示选项。提供了帮助您改进问题的链接。你没有向我们展示你为解决自己的问题所做的任何努力。请将您尝试的JavaScript添加到您的问题中。非常感谢,这正是我所需要的。您的第一个示例是完美答案文档。getElementById('optGrp2')。getElementsByTagName('option')[0]。selected=true;注意“office”这个词实际上是一个变量,因此应该用一个值为组id之一的变量来替换它,即:document.getElementById(myVariable.value)。这就是为什么选定项目的定位有效的原因。您不应该将自己的答案标记为已接受,而应该将为您提供正确解决方案的答案标记为已接受。
    document.getElementById(document.getElementById( myVariable ).value).getElementsByTagName('option')[0].selected = true;