jQuery AutoComplete 是 jQuery UI 库中的一个组件,它能够为输入框提供自动完成功能。当用户在输入框中键入时,它会显示一个下拉列表,其中包含与用户输入匹配的建议项。
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
<input type="text" id="autocomplete1" placeholder="搜索城市">
<input type="text" id="autocomplete2" placeholder="搜索国家">
<input type="text" id="autocomplete3" placeholder="搜索颜色">
<script>
$(function() {
var cities = ["北京", "上海", "广州", "深圳", "杭州", "成都"];
var countries = ["中国", "美国", "英国", "日本", "韩国", "德国"];
var colors = ["红色", "蓝色", "绿色", "黄色", "黑色", "白色"];
$("#autocomplete1").autocomplete({
source: cities
});
$("#autocomplete2").autocomplete({
source: countries
});
$("#autocomplete3").autocomplete({
source: colors
});
});
</script>
</body>
</html>
$(function() {
var sharedData = ["苹果", "香蕉", "橙子", "葡萄", "西瓜", "芒果"];
$(".fruit-autocomplete").autocomplete({
source: sharedData
});
});
$(function() {
$("#autocomplete1, #autocomplete2").autocomplete({
source: function(request, response) {
$.ajax({
url: "/api/search",
dataType: "json",
data: {
term: request.term,
type: $(this.element).attr('id') // 可以根据输入框ID区分
},
success: function(data) {
response(data);
}
});
},
minLength: 2,
delay: 300
});
});
原因:通常是由于CSS冲突或定位问题导致。
解决方案:
.ui-autocomplete {
position: absolute;
z-index: 1000;
cursor: default;
padding: 0;
margin-top: 2px;
list-style: none;
background-color: #ffffff;
border: 1px solid #ccc;
max-height: 200px;
overflow-y: auto;
overflow-x: hidden;
}
原因:未区分不同输入框的数据源或回调函数。
解决方案:
$("#input1").autocomplete({
source: function(request, response) {
// 特定于input1的数据处理
}
});
$("#input2").autocomplete({
source: function(request, response) {
// 特定于input2的数据处理
}
});
解决方案:
delay
选项减少请求频率minLength
要求用户输入更多字符后再触发$("#autocomplete").autocomplete({
source: bigDataArray,
minLength: 3,
delay: 500
});
$("#autocomplete").autocomplete({
source: function(request, response) {
var fruits = ["苹果", "香蕉"];
var vegetables = ["胡萝卜", "土豆"];
var results = [
{ label: "水果", items: fruits.filter(item => item.includes(request.term)) },
{ label: "蔬菜", items: vegetables.filter(item => item.includes(request.term)) }
];
response(results);
}
}).autocomplete("instance")._renderMenu = function(ul, items) {
var self = this;
$.each(items, function(index, item) {
if (item.items && item.items.length > 0) {
ul.append("<li class='ui-autocomplete-category'>" + item.label + "</li>");
$.each(item.items, function(index, item) {
self._renderItemData(ul, item);
});
}
});
};
$("#autocomplete").autocomplete({
source: [
{ id: 1, name: "张三", type: "员工" },
{ id: 2, name: "李四", type: "客户" }
],
focus: function(event, ui) {
$("#autocomplete").val(ui.item.name);
return false;
},
select: function(event, ui) {
$("#selected-id").val(ui.item.id);
return false;
}
}).autocomplete("instance")._renderItem = function(ul, item) {
return $("<li>")
.append("<div>" + item.name + " <small>(" + item.type + ")</small></div>")
.appendTo(ul);
};
$("#autocomplete").autocomplete({
source: function(request, response) {
var cacheKey = request.term;
if (this.cache && this.cache[cacheKey]) {
response(this.cache[cacheKey]);
return;
}
$("#loading").show();
$.ajax({
url: "/api/search",
data: { q: request.term },
success: function(data) {
this.cache = this.cache || {};
this.cache[cacheKey] = data;
response(data);
},
error: function() {
response([]);
},
complete: function() {
$("#loading").hide();
}
});
},
minLength: 2
});
通过以上方法和技巧,您可以在多个文本框上高效地实现jQuery AutoComplete功能,并根据不同需求进行定制。
没有搜到相关的文章