我正在使用Igor Vaynberg的Select2 jQuery插件和Infinite Scroll with Remote Data选项为我的网站制作一个自动填充搜索框。 AJAX运行良好,结果显示出来,但它们是不可选择的 - 更改事件永远不会被触发,当您单击结果时,没有任何反应。
Chrome控制台中也没有出现任何错误,因此我认为这不是语法错误,而是插件将其误认为是禁用的选择框。 编辑:为结果列表尝试了一个单独的点击事件,这个事件从未被解雇过,我现在非常确定会有一些事情干扰事件。
这是我目前的代码,
// Search
$("#site-search").select2({
placeholder: "Search posts",
minimumInputLength: 3,
ajax: {
url: "http://localhost/mysite/search",
dataType: 'json',
quietMillis: 500,
data: function (term, page) {
return {
q: term,
page_limit: 10,
page: page // page number
};
},
results: function (data, page) {
var more = (page * 10) < data.length; // whether or not there are more results available
// return the value of more to tell if more results can be loaded
return {results: data, more: more};
}
},
formatResult: function(post) {
// return html markup for individual result item
markup = '<img src="'+post.image+'" style="width:40%;float:left;margin-right:5px">';
markup += '<p>'+post.title+'</p>';
markup += '<div class="clearfix"></div>';
return markup;
},
formatSelection: function(post) {
// This shows up in the select box
return post.title;
},
dropdownCssClass: "bigdrop" // apply css that makes the dropdown taller
}).on('change', function(e) {
try {
var slug = e.val.slug;
window.location.href = "http://localhost/mysite/posts/"+slug;
} catch(error) {
console.log('Selected search result is invalid: ');
}
});
选择框本身只是一个类型为:hidden
的输入<input type="hidden" class="bigdrop" id="site-search" style="width:100%;height:auto">
答案 0 :(得分:47)
您的问题似乎是,您的结果数据没有名为“id”的属性。数据Select2 plugins wants an id field,如果没有,则选项“不可选”。您可以提供id函数来覆盖此行为:
$("#site-search").select2({
id: function(obj) {
return obj.slug; // use slug field for id
},
...