Select2 4.0 单击项目不会触发 select2:select
Select2 4.0 clicking item doesn't fire select2:select
我正在使用 select2 4.0,当我从 json 文件加载数据时,创建的元素 none 会触发 select2:select
事件。我以为它与事件委托有关,但网站上的示例似乎做得很好。
在过去的一个小时里,我一直为此伤脑筋,我只是不明白我错过了什么。
现在我正在使用它来 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);
有人可以告诉我我做错了什么吗?我只是不明白。
听起来您没有在数据对象上设置 id
字段。如果没有此字段,Select2 将无法知道将 <select>
的 value
设置为什么,因此它不允许选择它。
此外,text
字段是搜索和(默认情况下)在结果列表中显示数据所必需的。
我正在使用 select2 4.0,当我从 json 文件加载数据时,创建的元素 none 会触发 select2:select
事件。我以为它与事件委托有关,但网站上的示例似乎做得很好。
在过去的一个小时里,我一直为此伤脑筋,我只是不明白我错过了什么。
现在我正在使用它来 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);
有人可以告诉我我做错了什么吗?我只是不明白。
听起来您没有在数据对象上设置 id
字段。如果没有此字段,Select2 将无法知道将 <select>
的 value
设置为什么,因此它不允许选择它。
此外,text
字段是搜索和(默认情况下)在结果列表中显示数据所必需的。