这是可行的,但您必须将source
选项转换为函数并自己发出 AJAX 请求。例如:
$("#selector").autocomplete({
source: function (request, response) {
/* Show the loading indicator while a search is in progress */
response([{ label: "Loading...", loading: true }]);
$.ajax({
url: "your_url_here",
data: request,
type: "GET",
dataType: "json"
}).success(response);
},
}).data("autocomplete")._renderItem = function (ul, item) {
var $li = $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + item.label + "</a>")
.appendTo(ul);
/* Make sure nothing happens when you click "Loading" */
if (item.loading) {
$li.find("a").on("click", false);
}
};
覆盖的最后一位_renderItem
是这样做的,以便我们可以取消加载项的单击事件(并防止它被放置在 中input
)。
示例:http: //jsfiddle.net/m3MGH/
更新,每条评论如下:
要在 a 中显示加载图像div
,您可以执行以下操作(只需更改_renderItem
函数):
.data("autocomplete")._renderItem = function(ul, item) {
var $li = $("<li></li>");
if (item.loading) {
$li.append("<div>Loading<img src='my_loading_img' /></div>").appendTo(ul);
} else {
$li.data("item.autocomplete", item).append("<a>" + item.label + "</a>").appendTo(ul);
}
return $li;
};
您可能必须使用一点 CSS 才能使事物定位正确,但这应该可以帮助您入门。