$("#pick, #drop").select2({
createSearchChoice: function (term, data) {
if ($(data).filter(function() {
return this.text.localeCompare(term) === 0;
}).length === 0) {
return {
id:term, text:term
};
}
},
multiple: false,
data: [
{id:'ZMH', text: 'ZMH, 108 Mile Ranch, Canada'},
{id:'AAH', text: 'AAH, Aachen, Germany'},
//and thousands others airpots.
]
});
由于数据volumne firefox与select2挂起,任何人都可以建议我使用该功能,没有挂起工作顺利。例如,我如何使用xml填充数据或任何其他选项。
答案 0 :(得分:0)
尝试缩小搜索结果
使用匹配器。
实施例
$("#pick,#drop").select2({
matcher: function(term, text,option) {
return option.html().toUpperCase().indexOf(term.toUpperCase())==0;
},
sortResults: function(results, container, query){
if(query.term == ""){
return results.slice(0,50);
}else{
return results;
}
},
//... other setting
});
例如
data result => [印度孟买,澳大利亚,悉尼]
我输入时
=>没有匹配器的结果
india,mumbai,australia
=>结果与匹配器
印度
使用匹配器因为搜索澳大利亚我不打算输入i所以通过删除不需要的结果你可以阻止你的select2挂起
注意:也可以尝试sortResults
已编辑的代码
$("#pick,#drop").select2({
multiple: false,
query: function (query) {
var data = {results: []};
if(query.term == ""){
for(var i = 0; i < 20 ;i++){
data.results.push({id: keyword[i].id, text: keyword[i].text});
}
}else{
for(var obj in keyword){
if(keyword[obj].text.toLowerCase().indexOf(query.term.toLowerCase()) == 0){
data.results.push({id: keyword[obj].id, text: keyword[obj].text});
}
}
}
query.callback(data);
}
});
<强> FIDDLE 强>
答案 1 :(得分:0)
由于您提到了大型数据集,不会同时加载所有记录。
相反,请尝试使用 scrolling
,每个卷轴10/15。
啊,我有一个类似的问题正在Git中被跟踪,一个人(名为 rocanowi )推荐无限滚动方法
对于大型数据集,我认为最好不要加载所有数据 页面加载。如果使用数据库,最好使用“加载远程” 数据“示例并一次返回10个数据(例如)。或者你 可以使用“带有远程数据的无限滚动”示例来获取更多数据 每次搜索加载。