在创建 <select>s 的 js 循环中设置选定的 <option>

Posted

技术标签:

【中文标题】在创建 <select>s 的 js 循环中设置选定的 <option>【英文标题】:Setting the selected <option> inside a js loop which creates <select>s 【发布时间】:2017-11-18 14:50:09 【问题描述】:

我需要通过更改 .value 来动态更改 select 的选定选项。但问题是,如果我在同一个 html div 之后添加一些东西,它会将所选选项重置为默认值。如何让它记住选择了哪个选项?为什么它甚至会重置以前的选择?

我认为 .innerHTML += 意味着它将 html 添加到元素的末尾而不改变已经存在的内容...

我从我的主 js 文件重新创建了问题,所以它更简单。基本上我们不知道将创建哪些选择以及将选择哪些选项。该信息来自数据库。因此,在创建所有选择后,我不能只移动 document.getElementById("select"+i).value = "option"+i; 部分。 输出:

function myFunction(a, b) 
inputs_div = document.getElementById("test_inputs");

for(i = 0; i < 4; i++)
    if(i == a || i == b)

        inputs_div.innerHTML += '<select name="select_name" id="select' + i + '">' + 
                    '<option value="option0">option0</option>' +
                    '<option value="option1">option1</option>' +
                    '<option value="option2">option2</option>' +
                    '<option value="option3">option3</option>' +
                    '</select>';

        document.getElementById("select"+i).value = "option"+i;
    
  
<div id="test_inputs"></div>
<button type="button" onclick="myFunction(1, 3)">run myFunction</button>

应该是option1,option3

是否有另一种方法可以同时选择每个在循环中创建的?

【问题讨论】:

添加到 innerHTML 首先序列化现有内容,附加新的 HTML,然后解析它。不要使用 innerHTML,使用 createElement 添加选项。 嗯不知道 createElement。但现在要改变一切将是一项艰巨的工作。我试图以某种方式将所有选择 id 和选项值保存在数组或对象中,然后在创建所有内容后设置它们。 【参考方案1】:

每次您的用户单击按钮时,您的 select 元素都会被完全删除并重新创建。发生此行为是因为您正在设置 innerHTML 属性来创建它们。这就是为什么每次都会重置所选值的原因 - 因为您每次都会看到一个全新的 select 元素。

【讨论】:

如果除了说明问题之外,它还提供了解决方案,这将是一个很好的答案。【参考方案2】:

只需将 innerHTML 替换为 DOM 方法。

关于“但现在要改变所有的东西会很费力。”,以下根据 OP 代码花了大约 5 分钟。

function myFunction(a, b) 
  inputs_div = document.getElementById("test_inputs");

  for (var i=0; i<4; i++) 
    if (i == a || i == b) 
    
      var sel = document.createElement('select');
      sel.name = "select_name";
      sel.id = 'select' + i;
      
      for (var j=0; j<4; j++) 
        sel.appendChild(new Option('option' + j,'option' + j));
      
      inputs_div.appendChild(sel);
      sel.selectedIndex = i;
    
  
<div id="test_inputs"></div>
<button type="button" onclick="myFunction(1, 3)">run myFunction</button>

【讨论】:

以上是关于在创建 <select>s 的 js 循环中设置选定的 <option>的主要内容,如果未能解决你的问题,请参考以下文章

js 操作select和option常见用法

js select选中

HTML+JS 实现select 选择其他后要求继续输入

Vue : Select

JS操作select

关于保存select的值如何保存: