请帮我解决我的问题。 我在javascript中遇到了问题。 我的问题是我必须使用日期验证。我有两个日期字段,我正在对两者进行验证,但问题是它正在一个日期字段而不是另一个日期字段。像:
function ValidateDate(DateFrom,DateTo)
{
var SDate = document.checkbookrequest.txtDateFrom.value;
var EDate = document.checkbookrequest.txtDateTo.value;
//variables for date from.
//In dob1 i am taking the date which the user is giving
//and split it into mm/dd/yyyy to compare with current date
var dob1=document.checkbookrequest.txtDateFrom.value;
var arr1 = dob1.split("/");
var m1= arr1[0];
var d1 = arr1[1];
var y1 = arr1[2];
//variables for date from.
//In dob i am taking the date which the user is giving
//and split it into mm/dd/yyyy to compare with current date
var dob=document.checkbookrequest.txtDateTo.value;
var arr = dob.split("/");
var m= arr[0];
var d = arr[1];
var y = arr[2];
//these variable for checking the datefiels should not be blank
var endDate = new Date(EDate);
var startDate= new Date(SDate);
if(SDate != '' && EDate != '' && startDate > endDate)
{
alert(" Date To must be greater than or equal to Date From.");
document.checkbookrequest.txtDateTo.value = "";
document.checkbookrequest.txtDateTo.focus();
return false;
}
else if(SDate == '')
{
alert("Please enter Date From");
document.checkbookrequest.txtDateFrom.focus();
return false;
}
else if(EDate == '')
{
alert("Please enter Date To");
document.checkbookrequest.txtDateTo.focus();
return false;
}
//this is to chck the from date
else if (EDate != "")
{
currentdate = new Date();
a=currentdate.getMonth()+1;
b=currentdate.getDate();
c=currentdate.getFullYear();
if((d==b)&&(m==a)&&(y==c))
{
alert('Please Enter valid Date Of Birth');
return false;
}
else if ((d>b)&&(m==a)&&(y==c))
{
alert('Please Enter valid Date Of Birth');
return false;
}
else if (y<=c-100)
{
alert('Please Enter valid Date Of Birth');
return false;
}
else{
document.checkbookrequest.cmd.value='btnSearch';
document.checkbookrequest.submit();
}
}
//this is to chck the to date
else if (SDate != "")
{
currentdate = new Date();
a=currentdate.getMonth()+1;
b=currentdate.getDate();
c=currentdate.getFullYear();
if((d1==b)&&(m1==a)&&(y1==c))
{
alert('Please Enter valid Date Of Birth in DateFrom');
return false;
}
else if ((d1>b)&&(m1==a)&&(y1==c))
{
alert('Please Enter valid Date Of Birth in DateFrom');
return false;
}
else if (y1<=c-100)
{
alert('Please Enter valid Date Of Birth in DateFrom');
return false;
}
else{
document.checkbookrequest.cmd.value='btnSearch';
document.checkbookrequest.submit();
}
}
else{
document.checkbookrequest.cmd.value='btnSearch';
document.checkbookrequest.submit();
}
}
<td>Date From:<font color="red">*</font></td>
<td><input type="text" name="txtDateFrom" ></td>
<td>Date To:<font color="red">*</font></td>
<td><input type="text" name="txtDateTo"> </td>
<input type="button" name="btnSearch" value="Search" onclick="return ValidateDate(txtDateFrom,txtDateTo)" /></td>
如果我把上面的“dateto”验证,那么它是有效的,但如果我在验证日期之后把它,那么日期从工作和日期到不起作用
那有什么不对吗? 请帮我... 提前致谢
答案 0 :(得分:3)
我建议你完全退出这条路,并通过使用无法输入无效数据的控制来减轻您的头痛。为什么不使用jQuery calendar作为输入。如果有两个有效日期,您的验证代码现在将仅限于检查结束日期是否早于开始日期
答案 1 :(得分:1)
我的猜测是嵌套的if有什么问题。
[编辑]如果不是这样,重构代码。将各种检查移动到新的JavaScript函数中。这应该使代码更短,更容易理解。尽量避免重复任何检查,即使它使JS变慢 - 你的主要任务是理解,而不是优化代码。如果您发现代码太慢(它不会是),您可以稍后进行优化。
然后创建测试,验证代码实际上是否符合您的预期。您可以使用众多JS框架中的一个或使用一个小技巧:定义一个函数,该函数将文本添加到ID为debug
的元素。在您的代码中,使用变量的当前值等在各个位置调用该函数。检查值是否正确。
稍后,您可以简单地将该函数定义为空,或者添加return
作为禁用它的第一个命令。
答案 2 :(得分:0)
我是亚伦的重构建议。通过将现有的大型功能分解为更小的单元,可以更容易地找到错误。
至于在JavaScript中验证日期,您可能会发现这有用:
var dateFromTxtBox = new Date(document.getElementById('txtDateFld').value);
if (isNaN(dateFromTxtBox))
{
alert('Invalid date entered in text box');
return;
}
此时,您知道用户已给出了正确的日期,您可以使用dateFromTxtBox变量来测试其他验证(例如,在特定日期之前/之后)。
答案 3 :(得分:0)
我使用jQuery UI日期方法验证日期,它完美运行:
$ .datepicker.parseDate('dd / mm / yy','26 / 01/11');
您可以使用 try / catch 来确定验证
(我知道这需要jQuery,它不是一个独立的解决方案,但我提供这个作为一个简单的替代方案)