JQuery自动完成(Autocomplete)是一种用户界面增强功能,当用户在输入框中输入时,系统会根据输入内容动态显示匹配的建议列表。这通常通过AJAX技术实现,从服务器异步获取数据而不需要刷新整个页面。
<!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 id="autocomplete-input" type="text" placeholder="搜索...">
<script>
$(function() {
$("#autocomplete-input").autocomplete({
source: function(request, response) {
$.ajax({
url: "/api/search",
dataType: "json",
data: {
term: request.term
},
success: function(data) {
response(data);
}
});
},
minLength: 2, // 最少输入2个字符才触发
delay: 300 // 输入后延迟300毫秒发送请求
});
});
</script>
</body>
</html>
$(document).ready(function() {
$('#search-box').on('keyup', function() {
var query = $(this).val();
if(query.length >= 2) { // 至少输入2个字符
$.ajax({
url: '/api/suggestions',
method: 'GET',
data: {q: query},
success: function(data) {
var suggestions = data.suggestions;
var suggestionsList = $('#suggestions-list');
suggestionsList.empty();
if(suggestions.length > 0) {
suggestions.forEach(function(item) {
suggestionsList.append('<li>' + item + '</li>');
});
suggestionsList.show();
} else {
suggestionsList.hide();
}
}
});
}
});
// 点击建议项填充到输入框
$(document).on('click', '#suggestions-list li', function() {
$('#search-box').val($(this).text());
$('#suggestions-list').hide();
});
});
问题:用户快速输入时,会发送多个AJAX请求,可能导致结果顺序错乱。
解决方案:
var xhr = null;
$('#search-box').on('keyup', function() {
var query = $(this).val();
// 取消上一个未完成的请求
if(xhr) {
xhr.abort();
}
if(query.length >= 2) {
xhr = $.ajax({
url: '/api/suggestions',
method: 'GET',
data: {q: query},
success: function(data) {
// 处理结果
}
});
}
});
问题:如果API在不同域名下,可能会遇到跨域限制。
解决方案:
$.ajax({
url: 'http://api.example.com/suggestions',
dataType: 'jsonp',
jsonp: 'callback',
data: {q: query},
success: function(data) {
// 处理结果
}
});
var suggestionCache = {};
$('#search-box').autocomplete({
source: function(request, response) {
var term = request.term;
if(term in suggestionCache) {
response(suggestionCache[term]);
return;
}
$.ajax({
url: "/api/search",
data: {q: term},
success: function(data) {
suggestionCache[term] = data;
response(data);
}
});
},
minLength: 2,
delay: 300
});
const express = require('express');
const app = express();
app.get('/api/suggestions', (req, res) => {
const query = req.query.q.toLowerCase();
const data = ['Apple', 'Banana', 'Cherry', 'Date', 'Fig', 'Grape'];
const results = data.filter(item =>
item.toLowerCase().includes(query)
);
res.json(results);
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
通过以上实现,可以创建一个高效、用户友好的自动完成功能,显著提升用户体验。
没有搜到相关的文章