【问题标题】:Javascript to validate start date and end date in asp.net在 asp.net 中验证开始日期和结束日期的 Javascript
【发布时间】:2011-11-17 00:45:10
【问题描述】:

我写了一个 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 会被触发。

我面临的问题

  1. JS 无法正确验证日期。我错过了什么?我正在从文本框中传递日期

  2. 第一次点击按钮时 JS 没有启动。第二次点击按钮时触发

另外,我已经注册了如下的JS;

btnShowReport.Attributes.Add("onclick", "return DateValidation('" + txtStartDate.Text + "', '" + txtEndDate.Text + "');");

上面的代码正确吗?注册 JS 的正确位置在哪里?

请指导..谢谢!

【问题讨论】:

  • 使用 date.parse 时,开始日期为 1294770600000

标签: c# javascript asp.net visual-studio


【解决方案1】:

使用Date.parse。您正在做的是检查一个字符串是否大于另一个字符串。

此外,该脚本将仅在第一次运行 txtStartDate.TexttxtEndDate.Text EVERY 时获取任何内容。

为什么?您还没有正确理解服务器端和客户端执行。

代码中的这一行,

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】:

主要问题是您如何注册事件。您正在使用包含带有值的字符串文字的代码创建一个字符串,这意味着您在创建字符串时从文本框中获取值,而不是在激活事件时。您必须在使用当前值更新代码之前进行回发,这就是它在第一次点击时不起作用的原因。

创建在点击时获取值的代码:

btnShowReport.Attributes.Add("onclick", "return DateValidation(document.getElementById('" + txtStartDate.ClientID + "').value, document.getElementById('" + txtEndDate.ClientID + "').value);");

另一个可能的问题是代码不比较日期,而是比较字符串。某些日期格式与字符串相当,例如基于 ISO 8601 的格式:“2010-12-31”“2011 年 1 月 1 日”。

在检查日期不为空后解析日期:

...
if (startDate != '' && EndDate != '') {
  var stdate = Date.parse(startDate);
  var enddate = Date.parse(EndDate);
  ...

【讨论】:

  • 根据您在第一段中提到的评论,您的意思是我需要在页面加载事件中注册 JS 吗?
  • @Xor power:在服务器代码的哪个位置添加属性并不重要。在页面被发送到浏览器并被解析为 HTML 代码之前,它只是一个字符串。重要的是字符串的变化,它从页面中的元素获取值,而不是使用文字字符串。
【解决方案3】:

除了前面两个人回答的内容之外,您还必须解析日期。您还需要验证它们是偶数日期。在客户端处理日期时,我经常使用这个库:

http://www.datejs.com/

【讨论】:

    【解决方案4】:

    我认为问题在于您没有比较日期 - 您刚刚将它们声明为 vars 没有类型,所以它们本质上是 Strings。

    查看Date.parse() 方法。

    【讨论】:

      【解决方案5】:

      您需要将字符串值解析为日期

      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;   
          }   
      } 
      

      如果没有进一步的代码,很难解释为什么您的按钮只在第二次点击时触发事件。你的按钮一开始就被禁用了吗?

      【讨论】:

      • 按钮每次都会触发事件,但它使用页面创建时的值,而不是字段中的当前值。
      • 那有什么解决办法呢? Date.Parse 工作!但是单击按钮后触发警报呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多