Javascript 更改自动完成时的过滤器,以允许对完整字符串进行排序
我有一个功能正常的自动完成jQuery输入控件,但有两件事我想修改 首先,它一次又一次地开火。我希望数据返回一次,缓存,不再调用 其次,我希望用户在控件中键入内容,并根据键入内容搜索整个字符串,而不仅仅是开始 这是我的功能脚本,它将数据返回到自动完成并工作Javascript 更改自动完成时的过滤器,以允许对完整字符串进行排序,javascript,jquery,json,autocomplete,Javascript,Jquery,Json,Autocomplete,我有一个功能正常的自动完成jQuery输入控件,但有两件事我想修改 首先,它一次又一次地开火。我希望数据返回一次,缓存,不再调用 其次,我希望用户在控件中键入内容,并根据键入内容搜索整个字符串,而不仅仅是开始 这是我的功能脚本,它将数据返回到自动完成并工作 <script type="text/javascript"> $(function () { $('#datePicker').datepicker(); }); $(document).ready(function
<script type="text/javascript">
$(function () {
$('#datePicker').datepicker();
});
$(document).ready(function() {
$("#autocomplete").autocomplete({
source: function (request, response) {
$.ajax({
url: "FacilitiesAsync",
type: 'GET',
cache: true,
data: 'sourceDb=myDb',
dataType: 'json',
success: function (json) {
// call autocomplete callback method with results
response($.map(json, function (name) {
return {
label: name.label,
value: name.value
};
}));
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
$("#autocomplete").text(textStatus + ', ' + errorThrown);
}
});
},
select: function (event, ui) {
$('#autocomplete').val(ui.item.label);
return false;
},
messages: {
noResults: '',
results: function () {
}
}
});
});
</script>
我的输入控件看起来像这样
<input id="autocomplete" />
我很感谢您的指导…要缓存服务器上的数据,请设置一个单独的函数来处理(并缓存,如果需要)来自ajax调用的响应:
var cachedResult = null;
function fetchResponse(callback) {
if (cachedResult) callback(cachedResult)
$.ajax({
url: "FacilitiesAsync",
type: 'GET',
cache: true,
data: 'sourceDb=myDb',
dataType: 'json',
success: function (json) {
// call autocomplete callback method with results
var cachedResult = $.map(json, function (name) {
return {
label: name.label,
value: name.value
};
});
callback(cachedResult);
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
$("#autocomplete").text(textStatus + ', ' + errorThrown);
}
});
}
$(document).ready(function() {
$("#autocomplete").autocomplete({
source: function (request, response) {
fetchResponse(function(result) {
response(result)
})
}
});
});
至于定制匹配器,请查看示例中的文档。您的自定义匹配器仅在正则表达式模式中有所不同。还请注意,这一切都是在“源”回调中完成的。您的代码与我的代码的工作原理相同。每次用户输入第三个字符试图退格以输入新的搜索条件时,都会进行调用。是否有一个设置,我可以更改使其缓存?显然,cache属性被设置为“true”,因此人们会认为这样做是可行的。
var cachedResult = null;
function fetchResponse(callback) {
if (cachedResult) callback(cachedResult)
$.ajax({
url: "FacilitiesAsync",
type: 'GET',
cache: true,
data: 'sourceDb=myDb',
dataType: 'json',
success: function (json) {
// call autocomplete callback method with results
var cachedResult = $.map(json, function (name) {
return {
label: name.label,
value: name.value
};
});
callback(cachedResult);
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
$("#autocomplete").text(textStatus + ', ' + errorThrown);
}
});
}
$(document).ready(function() {
$("#autocomplete").autocomplete({
source: function (request, response) {
fetchResponse(function(result) {
response(result)
})
}
});
});