Aar*_*dam 9 javascript jquery jquery-ui autocomplete
嘿我正在尝试在用户当前查询没有结果时返回消息!我知道我需要利用keyup事件,但看起来插件正在使用它
这个问题真的已经过时了,无论如何我正在使用新的jQuery UI 1.8.16,自动完成现在已经完全不同了:http://jqueryui.com/demos/autocomplete/#default
无论如何,如果你正在尝试做与问题相同的事情,那么就没有更多的解析函数,据我所知,没有用搜索结果调用的函数.
我设法解决这个问题的方法是重写自动完成的过滤功能 - 注意:这会影响你所有的自动完成功能
$.ui.autocomplete.filter = function(array, term) {
var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
var aryMatches = $.grep( array, function(value) {
return matcher.test(value.label || value.value || value);
});
if (aryMatches.length == 0){
aryMatches.push({
label: '<span class="info" style="font-style: italic;">no match found</span>',
value: null
});
}
return aryMatches;
};
Run Code Online (Sandbox Code Playgroud)
该函数稍微从源代码修改,grep调用是相同的,但如果没有结果我添加一个值为null的对象,那么我覆盖select调用以检查null值.
这会给你一个效果,如果你继续输入并且找不到匹配项,你会在下拉列表中看到"找不到匹配项",这非常酷.
要覆盖select调用,请参阅jQuery UI Autocomplete禁用Select&Close事件
$(this).data('autocomplete').menu.options.selected = function(oEvent, ui){
if ($(ui.item).data('item.autocomplete').value != null){
//your code here - remember to call close on your autocomplete after
}
};
Run Code Online (Sandbox Code Playgroud)
因为我在页面上的所有自动填充中都使用它,所以请确保先检查值是否为null!在您尝试引用不存在的键之前.
您可以尝试提供一个解析选项(处理数据解析的函数),并在没有返回结果进行解析时执行您需要的操作.
此示例假定您正在返回包含FullName和Address属性的JSON对象数组.
$('#search').autocomplete( {
dataType: "json",
parse: function(data) {
var array = new Array();
if (!data || data.length == 0) {
// handle no data case specially
}
else {
for (var i = 0; i < data.length; ++i) {
var datum = data[i];
array[array.length] = {
data: datum,
value: data.FullName + ' ' + data.Address,
result: data.DisplayName
};
}
}
return array;
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13017 次 |
| 最近记录: |