javascript - 在日期选择器上键入后如何验证日期范围
问题描述
我有两个日期选择器。一个是开始日期,一个是结束日期。现在我可以检测开始日期是否确实早于结束日期。只要用户在日历上选择一个日期,日期选择器和验证就可以正常工作。我的问题在于当我开始在结束日期输入日期时。例如,开始日期字段为 2019 年 5 月 2 日,格式为 2019-05-02。现在,当我开始在结束日期字段中输入值 2019 中的 2 时,警报框不会等待我输入整个日期输入并通知我结束日期不应早于开始日期。除了将日期选择器字段转换为只读的创可贴解决方案之外,关于代码逻辑是否有任何解决方法?
这是结束日期的代码:
$('.endDate').each(function (index)
{
$(this).attr("id", "pmed" + index);
$(this).datepicker({
format: 'yyyy-mm-dd'
}).on('changeDate', function (endDate)
{
// Do something
let newEnddate = new Date(endDate.date)
newEnddate.setDate(newEnddate.getDate() + 1)
let start_date = parseInt((new Date($("#pmst" + index).val())) / (1000 * 60 * 60 * 24))
let end_date = parseInt(newEnddate / (1000 * 60 * 60 * 24))
var inputCTR = parseInt(index) + 1
if (start_date > end_date) {
//alert("Starting date must not be less than End date.")
$(this).val("")
$('#pmst' + inputCTR).prop('disabled', true);
$('#pmed' + inputCTR).prop('disabled', true);
start_date = "NaN"
}
start_date = start_date.toString()
if (start_date != "NaN" && end_date != "") {
$('#pmst' + inputCTR).prop('disabled', false);
$('#pmed' + inputCTR).prop('disabled', false);
}
});
});
解决方案
正如你所说,验证器没有在等你,所以为了让它等待使用 debounce。如果您不知道什么是去抖动,请在此处阅读。https://www.geeksforgeeks.org/debouncing-in-javascript/
例子
$('.endDate').each(function (index){
$(this).attr("id", "pmed" + index);
$(this).datepicker({
format: 'yyyy-mm-dd'
}).on('changeDate', $.debounce(1000, function (endDate) { //1000 is in milliseconds
// Do something
let newEnddate = new Date(endDate.date)
newEnddate.setDate(newEnddate.getDate() + 1)
let start_date = parseInt((new Date($("#pmst" + index).val())) / (1000 * 60 * 60 * 24))
let end_date = parseInt(newEnddate / (1000 * 60 * 60 * 24))
var inputCTR = parseInt(index) + 1
if (start_date > end_date) {
//alert("Starting date must not be less than End date.")
$(this).val("")
$('#pmst' + inputCTR).prop('disabled', true);
$('#pmed' + inputCTR).prop('disabled', true);
start_date = "NaN"
}
start_date = start_date.toString()
if (start_date != "NaN" && end_date != "") {
$('#pmst' + inputCTR).prop('disabled', false);
$('#pmed' + inputCTR).prop('disabled', false);
}
}));
});
可能会有一些编码错误,因为我自己没有运行它,但 debounce 对你来说是一个完美的用例。
推荐阅读
- javascript - Rendering complex JSON/Javascript Objects in React
- ios - 在 TableViews 的上下文中,swift 中的“编辑模式”是什么?
- angular - Ionic unable to change active segment button color
- python - BeautifulSoup selector returning empty list
- java - Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test (default-test) on project
- nuxt.js - nuxt js - terser - 超出了调用重试次数
- r - R - 加载多个 csv 文件并从名称中删除 .csv
- python-3.x - AWS Lambda 层 - 尽管有任何代码更改,版本都会增加
- python - 如何在 pysimplegui 中更新我的布局中的天气信息,并在每次按下窗口中的“刷新”时显示它?
- office-js - 在函数参数对话框的描述中编码特殊字符