Bri*_*unt 13 jquery jquery-ui autocomplete
我想知道当使用jQueryUI自动完成时从服务器返回空结果时如何捕获并添加自定义处理程序.
关于这一点似乎有一些与各种jQuery插件相关的问题(例如,当结果为空时,jQuery自动完成显示"无数据"错误消息),但我想知道是否有更好/更简单的方法来实现与jQueryUI相同自动完成.
在我看来,这是一个常见的用例,我想也许jQueryUI通过添加干净地处理这种情况的能力改进了jQuery自动完成.然而,我无法找到这种功能的文档,在我破解它之前,我想抛弃一些触角,以防其他人以前见过这个.
虽然可能不是特别有影响力,但我可以让服务器返回任何内容 - 例如返回HTTP 204: No Content200/JSON空列表 - 无论是什么使得最容易在jQueryUI的自动完成中捕获结果.
我的第一个想法是response callback根据文档传递一个带有两个参数的回调,即一个请求对象和一个处理代码:
第三种变体即回调提供了最大的灵活性,可用于将任何数据源连接到自动完成.回调有两个参数:
一个请求对象,具有一个名为"term"的属性,它引用当前文本输入中的值.例如,当用户在城市字段中输入"new yo"时,自动完成术语将等于"new yo".
一个响应回调,它要求一个参数包含要向用户建议的数据.应根据提供的术语过滤此数据,并且可以采用上述任何简单本地数据格式(String-Array或具有标签/值/两者属性的Object-Array).
当响应回调没有收到任何数据时,它会插入一个特殊的单行对象数组,该对象数组有一个标签和一个没有数据的指示符(因此select/focus将其识别为无数据返回的指示符).
这似乎过于复杂.我更喜欢能够使用一个源:"http:// ...",只是在某个地方有一个回调,表明没有返回任何数据.
谢谢你的阅读.
布赖恩
编辑:
这是我为解决这个问题而创建的包装函数,基于@ ThiefMaster的保证,它是正确的方法:
function autocomplete(input, source_url, on_select, on_focus, default_data) {
/* Autocompletion for an input field
* input: the field for autocompleting
* source_url: the JSON url for getting data
* on_select: function (event,ui) - when someone selects an element
* on_focus: function (event, ui) - when someone focuses an element
* default_data: function () returning default data; alternatively is the
* default dataset e.g. {'label':'X','value':'Y'}
*/
$(input).autocomplete({
source: function (request, response) {
$.ajax({
url: source_url,
dataType: "json",
data: request,
success: function (data) {
if (!data.length) { // expect [] or ""
var def_data = typeof(default_data) == 'function' ?
default_data() : default_data;
response(def_data);
} else {
response(data);
}
}
});
},
minLength: 3,
select: on_select,
focus: on_focus,
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21798 次 |
| 最近记录: |