Jquery ui jQuery自动完成:如何启用缓存?
这是我使用函数推送建议数组的源代码:Jquery ui jQuery自动完成:如何启用缓存?,jquery-ui,autocomplete,Jquery Ui,Autocomplete,这是我使用函数推送建议数组的源代码: jQuery(document).ready(function ($){ var cache = {}; function split( val ) { return val.split( /,\s*/ ); } function extractLast( term ) { return split( term ).pop(); } $("#ctags-input")
jQuery(document).ready(function ($){
var cache = {};
function split( val ) {
return val.split( /,\s*/ );
}
function extractLast( term ) {
return split( term ).pop();
}
$("#ctags-input")
.bind( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).data( "autocomplete" ).menu.active ) {
event.preventDefault();
}
})
.autocomplete({
source: function(req, add){
var ctags_action = 'suggest_tags';
var term = req.term;
if (term in cache) {
add(cache[term]);
return;
}
$.getJSON(SuggestTags.url+'?callback=?&action='+ctags_action, req, function(data) {
var suggestions = [];
$.each(data, function(i, val){
suggestions.push({
label: val.name,
count: val.count
});
});
cache[term] = suggestions;
add(suggestions);
});
},
focus: function() {
return false;
},
select: function( event, ui ) {
var terms = split( this.value );
terms.pop();
terms.push( ui.item.value );
terms.push( "" );
this.value = terms.join( ", " );
return false;
}
})
.data( "autocomplete" )._renderItem = function( ul, item ) {
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + item.label + " (" + item.count+ ")</a>")
.appendTo(ul);
};
});
如何在我的代码中实现这个缓存演示 将
建议
放入缓存
var term = req.term;
if (term in cache) {
add(cache[term]);
return;
}
...
cache[term] = suggestions;
add(suggestions);
我更新了我的问题,在缓存中添加了建议,但它仍然发送ajax请求代码>,即每次输入函数时清空缓存。缓存必须是函数外部的全局变量。我刚刚移动了'var cache={};'并将其放在函数($)的开头。它仍然没有使用缓存。我只是看了多个完整的演示。在它的source:函数中,它在查找完成列表中的输入之前使用extractLast(req.term),因此它只处理逗号分隔列表中的最后一项。你需要做类似的事情。如果没有这个,您将使用整个输入(包括已经完成的项)作为缓存键代码>至<代码>变量期限=提取期限(要求期限)代码>
var term = req.term;
if (term in cache) {
add(cache[term]);
return;
}
...
cache[term] = suggestions;
add(suggestions);