【问题标题】:Select2 4.0 clicking item doesn't fire select2:selectSelect2 4.0 点击项目不会触发 select2:select
【发布时间】:2015-07-09 02:26:31
【问题描述】:

我使用的是 select2 4.0,当我从 json 文件加载数据时,所有创建的元素都不会触发 select2:select 事件。我认为这与事件委托有关,但网站上的示例似乎做得很好。

在过去的一个小时里,我一直在为此烦恼,我只是不明白我错过了什么。

现在我正在使用它来选择一个项目,但这显然不起作用:

$("body").on("click", "#select2-select-results .person-entry", function()
{
    var $this = $(this);
    var name = $this.data('name');

    select2.find('option').val(name).text(name);
});

绑定$(...).on('select2:select'); 永远不会触发,但$(...).on('select2:open); 会触发。所以我不确定发生了什么。

然而,我注意到的是,在加载数据后,没有创建 <option> 标记。

这是我处理这件事的整个 JavaScript:

(function($)
{
    "use strict";
    var term = null;
    var select2 = $("#select");

    select2.select2({
        allowClear: true,
        ajax: {
            url: "js/data.json",
            dataType: "json",
            delay: 250,
            data: function(params)
            {
                // Save the terms for filtering
                term = params.term;

                return params;
            },
            processResults: function(data)
            {
                var people = [];

                for(var i = 0; i < data.people.length; i++)
                {
                    var person = data.people[i];
                    var filter = term || '';

                    if (person.name.toLowerCase().indexOf(filter.toLowerCase()) !== -1) {
                        people.push(person);
                    }
                }

                return {
                    results: people
                };
            }
        },
        templateResult: function(person)
        {
            if (person.loading) {
                return person.text;
            }

            var personDetails = '<div class="person-information">' +
                '<span class="person-name">' + person.name + '</span>' +
                '<span class="person-address">' + person.address + '</span>' +
                '</div>';

            return '<div class="person-entry" data-name="' + person.name + '"><img src="' + person.image + '" />' + personDetails + '</div>';
        },
        templateSelection: function(person)
        {
            return person.name;
        },
        escapeMarkup: function(markup)
        {
            return markup
        }
    });

    $("body").on("click", "#select2-select-results .person-entry", function()
    {
        var $this = $(this);
        var name = $this.data('name');

        select2.find('option').val(name).text(name);
    });
})(jQuery);

有人可以告诉我我在这里做错了什么吗?我就是不明白。

【问题讨论】:

  • @KevinBrown 我不知道这是必需的。在文档中没有看到它。 >_

标签: javascript jquery jquery-select2-4


【解决方案1】:

听起来您没有在数据对象上设置id 字段。如果没有这个字段,Select2 无法知道将您的&lt;select&gt;value 设置为什么,因此它不允许选择它。

此外,text 字段是搜索和(默认)在结果列表中显示数据所必需的。

【讨论】:

  • 我只想提一下,我用大写字母设置属性“ID”,而不是用小写字母设置“id”,所以我遇到了同样的问题,可能这对其他人有帮助.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 2016-01-21
  • 1970-01-01
相关资源
最近更新 更多