Javascript 如何根据彼此和当前日期验证两个日期字段?
我正在尝试验证HTML表单字段:Javascript 如何根据彼此和当前日期验证两个日期字段?,javascript,html,jquery,Javascript,Html,Jquery,我正在尝试验证HTML表单字段: 开始日期必须早于结束日期 这两个日期都不能在过去 这是我的表格输入: $(文档).ready(函数(){ var dateIsBefore=false; var dateInPast=false; $('end#u date')。在('keyup',function()上{ 如果($('开始日期').val() >肯定优于 KEYUP ——但您也可能要考虑输入事件> 更改< /代码>和输入事件在日期输入时是相同的,我认为使用change事件只增加了一点可读性。
$(文档).ready(函数(){
var dateIsBefore=false;
var dateInPast=false;
$('end#u date')。在('keyup',function()上{
如果($('开始日期').val()<$('结束日期').val()){
dateIsBefore=true;
}否则{
$('#message').html('开始日期不能晚于结束日期').css('颜色','红色');
dateIsBefore=false;
}
});
$(“#submitRequest”)。单击(函数(e){
如果(!dateIsBefore){
e、 预防默认值();
}
})
})
提交请求
您正试图在您的条件下直接比较输入值。这些值是字符串,它们作为字符串进行比较。
要将这些值作为日期进行比较,只需从输入值字符串创建一个新的日期对象,然后进行比较:
if(new Date($('#start_date').val()) > new Date($('#end_date').val())) {
alert('End has to be after start');
}
更进一步,如果条件返回true
,您可以将输入值重置为null
,这样您的输入就没有值,而且由于它具有required
属性,因此提交中的附加检查变得多余,可以删除
if(new Date($('#start_date').val()) > new Date($('#end_date').val())) {
alert('End has to be after start');
$(this).val(null);
}
旁注:
我宁愿使用
change
事件而不是keyup
事件来验证您的输入。在输入有效的日期字符串之前使用keyup
事件并进行检查时,会出现大量不必要的运行,甚至可能出现错误。您可以使用momentjs
库,该库在处理日期时间方面很受欢迎
在代码中,您需要set$('#message').html(''代码>如果有效
$(文档).ready(函数(){
var dateIsBefore=false;
var dateInPast=false;
$('end#u date')。在('keyup',function()上{
var start_date=时刻($(“#start_date”).val(),“DD/MM/YYYY”);
var end_date=时刻($('end_date').val(),“DD/MM/YYYY”);
if(开始日期<结束日期){
dateIsBefore=true;
$('#message').html('');
}否则{
$('#message').html('开始日期不能晚于结束日期').css('颜色','红色');
dateIsBefore=false;
}
});
$(“#submitRequest”)。单击(函数(e){
如果(!dateIsBefore){
e、 预防默认值();
}
})
})
提交请求
这是否回答了您的问题?我使用日期类型-代码中没有日期类型,只有字符串。您需要转换<代码> $(“yid id”)。()(代码)>日期,然后比较。<代码>更改< /C> >肯定优于<代码> KEYUP ——但您也可能要考虑<代码>输入<代码>事件> <代码>更改< /代码>和<代码>输入<代码>事件在日期输入时是相同的,我认为使用change
事件只增加了一点可读性。