【问题标题】:Appending the same Option to multiple selects将相同的选项附加到多个选择
【发布时间】:2020-11-26 15:56:30
【问题描述】:

大家好:快速提问:我的页面中有三个 Select 元素,我需要(最初)填充相同的选项。数据来自 AJAX 请求。

谁能告诉我为什么只有第一个 Select 附加了选项(尽管它在 .each() 中是最后一个),而其他的没有?这不是一个大问题,我可以通过其他方式解决它,但我只是想知道是否有人可以向我解释一下。

$(document).ready(function () {

            
                    var data = {test: "testing", test2: "testing2", test3: "testing3"}
                    let subscriptionSelect = $('#select1');
                    let showSelect = $('#select3');
                    let noShowSelect = $('#select4');
                    subscriptionSelect.empty().append($('<option></option>').val('').text('------'));
                    showSelect.empty().append($('<option></option>').val('').text('------'));
                    noShowSelect.empty().append($('<option></option>').val('').text('------'));
                    $.each(data, function (key, value) {
                        let option = new Option(key, value);
                        noShowSelect.append(option);
                        showSelect.append(option);
                        subscriptionSelect.append(option);
                    });
                   
                },
        );

JSFiddle : https://jsfiddle.net/stuoq3f5/

【问题讨论】:

  • 如果 new Option 创建一个 HTMLOptionElement,您可以将其附加到 1 个父节点。所以你必须复制它:showSelect.append(option.cloneNode()) 等等

标签: javascript append options


【解决方案1】:

您必须将 cloneNode(true) 与深度克隆一起使用,因为您正在创建一个选项,然后将其附加到 noShowSelect,然后将其从 noShowSelect 中删除。

                   $.each(data, function (key, value) {
                    let option = new Option(key, value);
                    $(option).html(value);
                    noShowSelect.append(option.cloneNode(true));
                    showSelect.append(option.cloneNode(true));
                    subscriptionSelect.append(option.cloneNode(true));
                });
               

【讨论】:

【解决方案2】:

您可以选择所有“选择”元素并附加选项:

$.each(data, function (key, value) {
    let option = new Option(key, value);
    $(option).html(value);
    $('select').append(option);
});

Fiddle

【讨论】:

  • 嘿卡洛斯:这是真的(也是我要采用的解决方案),谢谢。但是,我想知道是否有人可以向我解释为什么这不起作用。
猜你喜欢
  • 2021-06-14
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
相关资源
最近更新 更多