jQuery UI 的 Autocomplete 是一个小部件(widget),它会在用户输入时显示一个下拉菜单,提供匹配输入值的选项列表。这个功能非常适合用于搜索选择框的实现,可以提升用户体验。
首先需要引入jQuery和jQuery UI库:
<link rel="stylesheet" href="https://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.min.js"></script>
<div class="ui-widget">
<label for="tags">搜索选择: </label>
<input id="tags">
</div>
$(function() {
var availableTags = [
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"JavaScript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"
];
$("#tags").autocomplete({
source: availableTags
});
});
$(function() {
$("#tags").autocomplete({
source: function(request, response) {
$.ajax({
url: "search.php",
dataType: "json",
data: {
term: request.term
},
success: function(data) {
response(data);
}
});
},
minLength: 2, // 至少输入2个字符才触发搜索
delay: 300 // 延迟300ms后发送请求
});
});
$("#tags").autocomplete({
source: availableTags,
focus: function(event, ui) {
$("#tags").val(ui.item.label);
return false;
},
select: function(event, ui) {
$("#tags").val(ui.item.label);
$("#selected-value").val(ui.item.value);
return false;
}
}).autocomplete("instance")._renderItem = function(ul, item) {
return $("<li>")
.append("<div>" + item.label + "<br>" + item.desc + "</div>")
.appendTo(ul);
};
$(function() {
var projects = [
{
value: "jquery",
label: "jQuery",
desc: "the write less, do more, JavaScript library"
},
{
value: "jquery-ui",
label: "jQuery UI",
desc: "the official user interface library for jQuery"
},
{
value: "sizzlejs",
label: "Sizzle JS",
desc: "a pure-JavaScript CSS selector engine"
}
];
$("#tags").autocomplete({
minLength: 0,
source: projects,
focus: function(event, ui) {
$("#tags").val(ui.item.label);
return false;
},
select: function(event, ui) {
$("#tags").val(ui.item.label);
$("#project-id").val(ui.item.value);
$("#project-description").html(ui.item.desc);
return false;
}
}).autocomplete("instance")._renderItem = function(ul, item) {
return $("<li>")
.append("<div>" + item.label + "<br>" + item.desc + "</div>")
.appendTo(ul);
};
});
原因:
解决方案:
原因:
解决方案:
delay
选项增加延迟minLength
选项,避免过早触发请求原因:
解决方案: 自定义匹配函数:
$("#tags").autocomplete({
source: function(request, response) {
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
response($.grep(availableTags, function(item) {
return matcher.test(item);
}));
}
});
jQuery UI的Autocomplete功能强大且灵活,通过合理配置可以满足大多数自动完成搜索选择的需求。
没有搜到相关的文章