【问题标题】:JavaScript Create New Drop Down List, add Options to Select from ArrayJavaScript 创建新的下拉列表,添加选项以从数组中选择
【发布时间】:2021-11-09 15:25:14
【问题描述】:

我正在开发一个将按钮添加到网页的用户脚本。单击时我正在处理的按钮之一将创建一个弹出 div。我正在尝试在弹出窗口中创建一个动态选择/选项下拉列表,其中的选项来自一个数组。但是,我不断收到错误,并正在寻求一些帮助以使其正常工作。这是我的代码的修改版本,用于处理选项和选择的创建。

var button = document.createElement('button'),
button.onclick = prompt;
function prompt() {
    var blockingDiv = document.createElement('div');
    blockingDiv.id = 'PopupBackground';
    var divPopup = document.createElement('div');
    divPopup.id = 'DivPopup';
    var logo = document.createElement('div');
    logo.id = 'Logo';
    var content = document.createElement('div');
    content.id = 'Content';
    var dropList = document.createElement('select');
    dropList.id = 'DropListSelect';
    dropList.name = 'DropListSelect';
    content.appendChild(DropList);
    var dropListOption = document.createElement('option');
    dropListOption.id = 'DropListOptions';
    dropListOption.name = 'DropListOptions';
    dropList.appendChild(dropListOption);
    var options = 
    [
        {
            'text': 'Select',
            'value': '',
            'defaultSelected': true,
            'selected': true
        },
        {
            'text': 'Text 1',
            'value': 'A',
            'defaultSelected': false,
            'selected': false
        },
        {
            'text': 'Text 2',
            'value': 'B',
            'defaultSelected': false,
            'selected': false
        },
        {
            'text': 'Text 3',
            'value': 'C',
            'defaultSelected': false,
            'selected': false
        }
    ];
    var select = document.querySelector('#DropListSelect');
    dropListOption.length = 0;
    for (var i = 0; i <= options.length - 1; i++) {
        var type = options[i];
        dropListOption[i] = new Option(type.text, type.value, type.defaultSelected, type.selected)
    }

当我点击按钮时,我得到Uncaught TypeError: Cannot set properties of null (setting 'length') at HTMLButtonElement.prompt

【问题讨论】:

  • 如果您能解释错误是什么,这将对我们有所帮助。
  • 对不起,我添加了我遇到的错误。
  • dropListOption 是一个“选项”。它没有“长度”属性。您似乎正在尝试为选项数组中的每个元素创建一个新选项。每次循环都需要创建一个选项。

标签: javascript arrays drop-down-menu html-select


【解决方案1】:

现在将我的代码更改为以下工作。感谢James 让我走上正轨!

var button = document.createElement('button'),
button.onclick = prompt;
function prompt() {
    var blockingDiv = document.createElement('div');
    blockingDiv.id = 'PopupBackground';
    var divPopup = document.createElement('div');
    divPopup.id = 'DivPopup';
    var logo = document.createElement('div');
    logo.id = 'Logo';
    var content = document.createElement('div');
    content.id = 'Content';
    var dropList = document.createElement('select');
    dropList.id = 'DropListSelect';
    dropList.name = 'DropListSelect';
    content.appendChild(DropList);
    var options = 
    [
        {
            'text': 'Select',
            'value': '',
            'defaultSelected': true,
            'selected': true
        },
        {
            'text': 'Text 1',
            'value': 'A',
            'defaultSelected': false,
            'selected': false
        },
        {
            'text': 'Text 2',
            'value': 'B',
            'defaultSelected': false,
            'selected': false
        },
        {
            'text': 'Text 3',
            'value': 'C',
            'defaultSelected': false,
            'selected': false
        }
    ];
    for (var i = 0; i <= options.length - 1; i++) {
        var dropListOption = document.createElement('option');
        dropListOption.id = 'DropListOptions';
        dropListOption.name = 'DropListOptions';
        var type = options[i];
        dropListOption.appendChild(new Option(type.text, type.value, type.defaultSelected, type.selected));
        dropList.appendChild(dropListOption);
    }

【讨论】:

    【解决方案2】:

    试试这个:

    var select = document.querySelector('#DropListSelect');
    select.innerHTML = ""; // delete all existing options
    for (var i = 0; i < options.length; i++) {
        var type = options[i];
        select.appendChild(new Option(type.text, type.value, type.defaultSelected, type.selected));
    }
    

    【讨论】:

    • 现在我收到错误:Uncaught TypeError: Cannot set properties of null (setting 'innerHTML') at HTMLButtonElement.prompt
    • 所以把它改成这个让我更进一步,然而,它在下拉菜单的一行中显示所有选项,而不是可以选择的多个选项:for (var i = 0; i &lt; options.length; i++) { var type = options[i]; dropListOption.appendChild(new Option(type.text, type.value, type.defaultSelected, type.selected)); dropList.appendChild(dropListOption); }
    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 2017-05-19
    • 2014-11-02
    相关资源
    最近更新 更多