我写了一个JS,应该检查开始日期是否小于结束日期。如果没有,应该抛出警报
JS写成;
function DateValidation(startDate, EndDate) {
debugger;
var stdate = startDate;
var enddate = EndDate;
if (stdate!= '' && enddate!='') {
if (stdate > enddate) {
alert('Start date cannot be greater than end date');
return false;
}
else {
return true;
}
}
}
当我点击按钮作为“显示报告”时,这个JS会被触发。
我面临的问题
JS未正确验证日期。我错过了什么?我正在从文本框中传递日期
第一次点击按钮时JS没有启动。第二次点击按钮时会触发
另外,我已经注册了JS,如下所示;
btnShowReport.Attributes.Add("onclick", "return DateValidation('" + txtStartDate.Text + "', '" + txtEndDate.Text + "');");
以上代码是否正确?注册JS的正确位置是什么?
请指导..谢谢!
答案 0 :(得分:2)
您需要将字符串值解析为日期
if (startDate!= '' && EndDate!='') {
var stdate = Date.parse(startDate);
var enddate = Date.parse(EndDate);
if (stdate > enddate) {
alert('Start date cannot be greater than end date');
return false;
}
else
{
return true;
}
}
如果没有进一步的代码,很难说明为什么你的按钮只会在第二次点击时触发事件。您的按钮是否已禁用?
答案 1 :(得分:2)
使用Date.parse
。你正在做的是检查字符串是否大于另一个字符串。
此脚本只会在脚本运行的txtStartDate.Text
,txtEndDate.Text
每隔时间内首次采用任何内容。
为什么呢?您还没有正确理解服务器端和客户端执行。
代码中的这一行
btnShowReport.Attributes.Add("onclick", "return DateValidation('" + txtStartDate.Text + "', '" + txtEndDate.Text + "');");
将脚本注册到在这些文本框中传递文本的页面。
您假设每次文本框中的文本更改时,该方法将采用新值并进行日期计算。
然而,假设在加载页面时两个文本框为空,则您的脚本看起来像这样。您可以通过检查页面源来验证这一点。
<inputid="btnShowReport" ... onclick="return DateValidation('','')>
由于JavaScript是在客户端运行的,因此每次都不会与服务器联系以获取这些文本框的当前值。
您可以做的是将自己的文本框传递给方法。像
这样的东西return DateValidation(txtStartDate.ClientID, txtEndDate.ClientID);
从方法中可以访问它,如下所示
function DateValidation(txtStartDate, txtEndDate) {
debugger;
var stdate = Date.parse(txtStartDate.value);
答案 2 :(得分:1)
我认为问题在于你没有比较日期 - 你刚刚宣布它们为var
而没有类型,因此它们基本上是String
。
查看Date.parse()
方法。
答案 3 :(得分:0)
添加前两个人回答的内容,你必须解析日期。您还需要验证它们是否为日期。在客户端使用日期时,我经常使用这个库:
答案 4 :(得分:0)
主要问题是您如何注册活动。您正在创建一个包含带有值的字符串文字的代码的字符串,这意味着您在创建字符串时从文本框中获取值,而不是在激活事件时。您必须在使用当前值更新代码之前进行回发,这就是为什么它在第一次单击时不起作用。
创建在点击时获取值的代码:
btnShowReport.Attributes.Add("onclick", "return DateValidation(document.getElementById('" + txtStartDate.ClientID + "').value, document.getElementById('" + txtEndDate.ClientID + "').value);");
另一个可能的问题是代码不比较日期,它比较字符串。某些日期格式与字符串相当,例如基于ISO 8601的格式:“2010-12-31”&lt; “2011-01-01”,但是必须将其他日期格式解析为要比较的日期,例如“31/12/2010”&gt; “01/01/2011”。
检查日期是否为空后解析日期:
...
if (startDate != '' && EndDate != '') {
var stdate = Date.parse(startDate);
var enddate = Date.parse(EndDate);
...