script/mvcar/js/script.js

92 lines
2.9 KiB
JavaScript

document.addEventListener('DOMContentLoaded', function() {
const searchButton = document.getElementById('searchButton');
const licensePlateInput = document.getElementById('licensePlate');
const errorMessage = document.getElementById('errorMessage');
// 从JSON文件获取车辆数据库
let carDatabase = [];
let isDataLoaded = false;
// 添加搜索频率限制
let lastSearchTime = 0;
const SEARCH_DELAY = 1000; // 1秒内只能搜索一次
// 加载车辆数据
fetch('js/cars.json')
.then(response => response.json())
.then(data => {
carDatabase = data;
isDataLoaded = true;
})
.catch(error => {
console.error('加载车辆数据失败:', error);
showError('无法加载车辆数据库');
});
searchButton.addEventListener('click', function() {
const plate = licensePlateInput.value.trim();
// 检查输入长度
if (plate.length < 3) {
showError('请输入至少3个字符进行搜索');
return;
}
// 检查搜索频率
const currentTime = new Date().getTime();
if (currentTime - lastSearchTime < SEARCH_DELAY) {
showError('搜索过于频繁,请稍后再试');
return;
}
lastSearchTime = currentTime;
if (!plate) {
showError('请输入车牌号码');
return;
}
// 检查数据是否已加载
if (!isDataLoaded) {
showError('数据加载中,请稍后再试...');
return;
}
// 改进的模糊匹配逻辑 - 要求至少3个连续字符匹配
const carInfo = carDatabase.find(car => {
const lowerPlate = car.plate.toLowerCase();
const searchPlate = plate.toLowerCase();
// 只有当搜索词长度>=3且能找到连续匹配时才返回true
if (searchPlate.length >= 3) {
return lowerPlate.includes(searchPlate);
}
return false;
});
if (carInfo) {
// 将车辆信息存储到 sessionStorage
sessionStorage.setItem('carInfo', JSON.stringify(carInfo));
// 跳转到结果页面
window.location.href = 'result.html';
} else {
showError('没有找到该车牌号码对应的车主信息');
}
});
// 回车键触发搜索
licensePlateInput.addEventListener('keypress', function(e) {
if (e.key === 'Enter') {
searchButton.click();
}
});
function showError(message) {
errorMessage.textContent = message;
errorMessage.style.display = 'block';
// 3秒后隐藏错误信息
setTimeout(() => {
errorMessage.style.display = 'none';
}, 3000);
}
});