我已经写了一个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如下;
btnShowReport.Attributes.Add("onclick", "return DateValidation('" + txtStartDate.Text + "', '" + txtEndDate.Text + "');");
以上代码正确吗?注册JS的正确地点是什么?
请引导..。谢谢!
发布于 2011-09-14 05:20:36
您需要将字符串值解析为日期。
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;
}
}
如果没有进一步的代码,就很难知道为什么您的按钮只在第二次单击时触发事件。开始时你的按钮是禁用的吗?
发布于 2011-09-14 05:21:30
使用Date.parse
。您要做的是检查一个字符串是否大于另一个字符串。
此外,脚本将只需要在txtStartDate.Text
中第一次出现的任何内容,每次运行脚本时都会使用txtEndDate.Text
。
为什么?您还没有正确理解服务器端和客户端的执行。
你代码中的这一行,
btnShowReport.Attributes.Add("onclick", "return DateValidation('" + txtStartDate.Text + "', '" + txtEndDate.Text + "');");
将脚本注册到在这些文本框中传递文本的页面。
您已经假定,每当文本在文本框中更改时,该方法将接受新值并进行日期计算。
但是,假设加载页面时两个文本框为空,则脚本将类似于此。您可以通过检查页面源来验证这一点。
<inputid="btnShowReport" ... onclick="return DateValidation('','')>
因为JavaScript是在客户端运行的,所以每次都不会与服务器联系以获取这些文本框的当前值。
您可以做的是将文本框self传递给方法。有点像
return DateValidation(txtStartDate.ClientID, txtEndDate.ClientID);
通过这个方法,您可以访问它,如下所示
function DateValidation(txtStartDate, txtEndDate) {
debugger;
var stdate = Date.parse(txtStartDate.value);
发布于 2011-09-14 05:22:37
我认为问题在于,您没有比较日期--您只是将它们声明为var
s,而没有类型,所以它们本质上是String
s。
查看Date.parse()
方法。
https://stackoverflow.com/questions/7416922
复制