设置 <select> 标签的选项文本(显示给用户)

Set options text (that is displayed to users) of <select> tag

我在 Google 工作表上创建了一个带有 <select> 下拉菜单的对话框。 我将此 Materializecss 框架代码用于 select。 下拉菜单必须显示我动态更新的数据。

我从后端调用该函数来获取我的数据将其显示在select选项中作为人们在下拉列表中看到的文本,用户的文本。

但数据在下拉列表中不可见(请参见下面白色选项的屏幕截图)。

在下拉菜单中,我得到了没有颜色的白色选项,只有当我点击它们时,我才能看到我的数据显示在一行中作为一个选择的变体。

换句话说,你没有看到你选择的东西,即使你认为一切都在正确的地方。

我需要 将数据添加到可见下拉列表 selection 以便您可以看到您选择的内容。

我试图将其添加为框架网站上提到的选项对象 ({}),但它对我不起作用。

感谢任何帮助。

代码:

    //on loading DOM select initialization, run my function
    document.addEventListener('DOMContentLoaded', function() {
        var elems = document.querySelectorAll('select');
        var options = addWeeks()
        var instances = M.FormSelect.init(elems, options);
        });

    function addWeeks() {
        //get data from backend and pass it to changeOptions function as arguments
        var weeks = google.script.run.withSuccessHandler(changeOptions).calculateWeeks()

        return weeks
     }

        function changeOptions(weeks) {


        var week1 = document.getElementById("1week").text = weeks[0]
        var week2 = document.getElementById("2week").text = weeks[1]
        var week3 = document.getElementById("3week").text = weeks[2]  

        var weeksTexts = {1: week1, 2: week2, 3: week3}

        return weeksTexts
    }
  <select>  
  <option value="" disabled selected>Choose week</option>
  <option value="1week" id ="1week" ></option>
  <option value="2week" id ="2week" ></option>
  <option value="3week" id ="3week" ></option>
  </select>

JS Fiddle - Add options dynamically

我会在 select 标签中添加一个 id,而不是给选项元素一个 ID 属性。如果您使用代码向 select 标签添加选项,则无需输入 pre-existing 选项标签 html

<select id="idWkChoice"><!-- select tag with only the first option -->
  <option value="" disabled selected>Choose week</option>
</select>

获取 select 元素,其中包含作为子项的所有选项。

var slctTagWeeks = document.getElementById('idWkChoice');//Get drop down element

向列表添加选项:

var slctTagWeeks = document.getElementById('idWkChoice');//Get drop down element
var option = document.createElement("option");
option.text = "Week 1";
option.value = "wk1";//Add a value code that is different than the show text
slctTagWeeks.add(option);

以上代码向列表中添加了一个以前不存在的选项。

然后你可以创建一个循环,并添加列表中的选项数:

var option;
var slctTagWeeks = document.getElementById('idWkChoice');//Get drop down element

var weeks = {
  wk1:'Week One',
  wk2:'Week Two',
  wk3:'Week Three'
}

for (var k in weeks) {
  thisID = k;
  thisText = weeks[k];
  option = document.createElement("option");
  option.text = thisText;
  option.value = thisID;//Add a value code that is different than the show text
  slctTagWeeks.add(option);

}

解决方案是将此 class 添加到 select 标签:"browser-default".

它取消了 Materializecss 框架将 select 元素转换为 ul 元素。

所以对于上面的代码,我现在动态传递值。