
在web应用开发中,表格数据展示和筛选是常见需求。当表格中包含日期信息时,用户往往希望能够通过日期输入框进行快速筛选。jquery提供了一种简洁高效的方式来实现这一功能。然而,对于html5的<input type="date">元素,其行为与普通文本输入框有所不同,这要求我们在事件监听上做出相应的调整,以确保筛选逻辑能够正确触发。
传统的文本输入框(<input type="text">)通常通过监听keyup事件来实时捕获用户的输入,并立即执行搜索或筛选操作。例如:
$(document).ready(function(){
$("#myInput").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("#myTable tr").filter(function() {
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});
});这段代码对于文本输入框非常有效,它会实时根据用户键入的字符筛选表格行。然而,当我们将输入框类型改为<input type="date">时,问题就出现了。<input type="date">元素在用户通过日历选择器选择日期时,并不会触发keyup事件,因为用户并没有“键入”字符。因此,如果继续使用keyup事件,当用户通过日历选择日期后,筛选功能将不会被激活,导致用户体验不佳。
解决input type="date"筛选问题的关键在于选择正确的事件监听器。change事件会在元素的值发生改变并且失去焦点时触发。对于<input type="date">,这意味着当用户通过日历选择了一个日期并关闭日历选择器,或者手动输入日期并离开输入框时,change事件就会被触发。这正是我们希望筛选逻辑执行的时机。
将事件监听从keyup改为change,即可完美解决此问题:
$(document).ready(function(){
$("#myInput").on("change", function() { // 将 keyup 改为 change
let value = $(this).val().toLowerCase();
$("#myTable tr").filter(function() {
// 假设表格中的日期格式与 input type="date" 的输出格式一致 (YYYY-MM-DD)
$(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);
});
});
});以下是一个完整的HTML页面示例,展示了如何使用jQuery和change事件实现表格日期筛选功能:
<!DOCTYPE html>
<html>
<head>
<title>jQuery表格日期筛选</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<style>
table {
font-family: arial, sans-serif;
border-collapse: collapse;
width: 100%;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
input[type="date"] {
padding: 8px;
margin-bottom: 15px;
border: 1px solid #ccc;
border-radius: 4px;
}
</style>
</head>
<body>
<input id="myInput" type="date" placeholder="搜索日期..">
<br><br>
<table>
<thead>
<tr>
<th>姓名</th>
<th>姓氏</th>
<th>日期</th>
</tr>
</thead>
<tbody id="myTable">
<tr>
<td>张</td>
<td>三</td>
<td>2022-06-03</td>
</tr>
<tr>
<td>李</td>
<td>四</td>
<td>2022-06-04</td>
</tr>
<tr>
<td>王</td>
<td>五</td>
<td>2022-06-05</td>
</tr>
<tr>
<td>赵</td>
<td>六</td>
<td>2022-06-06</td>
</tr>
<tr>
<td>孙</td>
<td>七</td>
<td>2022-07-01</td>
</tr>
</tbody>
</table>
<script>
$(document).ready(function(){
$("#myInput").on("change", function() {
// 获取输入框的值,并转换为小写以进行不区分大小写的匹配
let searchValue = $(this).val().toLowerCase();
// 遍历表格中的每一行
$("#myTable tr").filter(function() {
// 获取当前行的所有文本内容,并转换为小写
let rowText = $(this).text().toLowerCase();
// 判断行文本是否包含搜索值
// 如果包含,则显示该行;否则隐藏
$(this).toggle(rowText.indexOf(searchValue) > -1);
});
});
});
</script>
</body>
</html>HTML结构:
CSS样式:
JavaScript逻辑:
通过将事件监听器从keyup切换到change,我们成功解决了input type="date"元素在日历选择后不触发筛选的问题。这个简单的改动使得表格日期筛选功能更加健壮和用户友好。掌握这种细微但关键的事件处理差异,是构建高质量前端应用的重要一步。
以上就是jQuery表格日期筛选:优化input type="date"的搜索体验的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号