【问题标题】:Iterate array > populate select box > return select box from function as html迭代数组>填充选择框>从函数返回选择框作为html
【发布时间】:2019-10-27 23:14:12
【问题描述】:

我必须遍历一个数组并用它填充一个选择框,但我不想将它附加到 html 中的元素。我想将变量中的选择框用作 html。

如何将变量frm_str 中的选择框函数结果用作html。

例子:

//users array

{"users":{"48f8fd57-5116-419c-b43a-cff90a4ae39b":"lolololo","4ab9f52a-d445-4b7a-b26d-1f5bc73ea751":"koen","c1d427f2-a39e-4b20-b531-3c325de96d85":"lolololo"}}

        // Setup module
    // ------------------------------
    
    var FullCalendarAdmin = function () {
    
        //
        // Setup module components
        //

var _componentRender = function () {
          _componentFullCalendarAdmin();
        };
    
        //
        // Bootbox message
        //
        var _bootboxContent = function (event, users) {
    
            var _selectUsers = function () {
                var userStr = [];
    
                jQuery.each(users, function (index, item) {
                    userStr.push('<option value="' + index + '">' + item + '</option>');
                });
    
                var object = $('<div/>').html(userStr).contents();
    
                return object;
            }
    
            var frm_str = '<form action="">' +
                '<div class="form-row">' +
                '<label class="col-md-auto col-form-label">Description</label>' +
                '<div class="col-md-8">' +
                '<select>' +
                _selectUsers +
                '</select>' +
                '</div>' +
                '</div>' +
                '</form>';
    
            var object = $('<div/>').html(frm_str).contents();
    
            return object
        }
    
    
        // Basic calendar
        var _componentFullCalendarAdmin = function (events, users) {
    
            // Define element
            var calendarAgendaViewElement = document.querySelector('.fullcalendar-agenda-admin');
    
            // Initialize
            if (calendarAgendaViewElement) {
                var calendarAgendaViewInit = new FullCalendar.Calendar(calendarAgendaViewElement, {
                    plugins: ['dayGrid', 'timeGrid', 'interaction'],
                    selectable: true,
                    select: function (event) {
                        bootbox.dialog({
                            title: 'Nieuwe afspraak.',
                            message: _bootboxContent(event, users),
                            buttons: {
                                success: {
                                    label: 'Save',
                                    className: 'btn-success',
                                    callback: function () {    
                                      
                                                calendarAgendaViewInit.addEvent(eventData);

    
    
                                        bootbox.alert({
                                            title: 'afspraaknaam: ' + name,
                                            message: 'Uw afspraak is toegevoegd.'
                                        });
                                    }
                                }
                            }
                        }
                        );
                        calendarAgendaViewInit.unselect();
                    },
                });
    
                calendarAgendaViewInit.render()
    
            }
        };
    
        //
        // Return objects assigned to module
        //
    
        return {
            init: function () {
                _componentRender();
            }
        }
        
    }();
    
    
    // Initialize module
    // ------------------------------
    
    document.addEventListener('DOMContentLoaded', function () {
        FullCalendarAdmin.init();
    });
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.10.0/fullcalendar.min.js"></script>
    <script src="https://unpkg.com/@fullcalendar/core/main.min.js"></script>
    <script src="https://unpkg.com/@fullcalendar/interaction/main.min.js"></script>
    <script src="https://unpkg.com/@fullcalendar/daygrid/main.min.js"></script>
    <script src="https://unpkg.com/@fullcalendar/timegrid/main.min.js"></script>
    <script src="https://unpkg.com/@fullcalendar/moment/main.min.js"></script>
    <script src="https://unpkg.com/@fullcalendar/bootstrap/main.min.js"></script>
    <script src="https://unpkg.com/@fullcalendar/timeline/main.min.js"></script>

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.10.0/fullcalendar.min.css" />

【问题讨论】:

  • 我给你做了一个sn-p。请用相关的 JS(示例用户)HTML 和 CSS 更新它
  • 我更新了我的代码
  • 这并没有使它像minimal reproducible example一样工作你能把代码减少到绝对最低限度吗?如您所见,它没有运行
  • 您肯定不会在var object = $('&lt;div/&gt;').html(frm_str).contents(); object.find('.openPicker').on('click', function (e) { 上获得任何事件处理,因此至少处理了一个问题。我到底要做什么才能看到你在问什么?您的 sn-p 仍然出现错误
  • 并且 users 应该是一个数组 - 示例不运行,示例用户没有用...请帮助我们通过创建来帮助您,我在这里重复自己一个 minimal reproducible example

标签: jquery html arrays loops ecmascript-5


【解决方案1】:

我使用 join() 解决了我的问题

我只需要将数组中的值作为纯 html 格式,因此发现使用 join 可以解决问题:)

感谢所有帮助,尤其是user:mplungjan

let _bootboxContent = function (event, users) {

    let _selectUsers = function () {
        var userArray = [];

        jQuery.each(users, function (index, item) {
            userArray.push('<option value="' + index + '">' + item + '</option>');
        });

        const userStr = userArray.join(" ");

        return userStr;
    }

    const frm_str = '<form action="">' +
        '<div class="form-row">' +
        '<label class="col-md-auto col-form-label">Description</label>' +
        '<div class="col-md-8">' +
        '<select>' +
        _selectUsers() +
        '</select>' +
        '</div>' +
        '</div>' +
        '</form>';

    const object = $('<div/>').html(frm_str).contents();

    return object
}

【讨论】:

  • 好的,现在我明白你的问题是什么了。代码太多了,之前看不到
猜你喜欢
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 2013-03-04
  • 2014-03-28
  • 2011-09-25
相关资源
最近更新 更多