【问题标题】:date validation in javascript using .js files使用 .js 文件在 javascript 中进行日期验证
【发布时间】:2012-02-15 00:24:29
【问题描述】:

我有一个 ini.jsp 页面,用于创建一个表单,用于添加两个文本字段以输入日期,然后在 ini.jsp 页面本身中使用 javascript 来验证这些日期。我现在有一些库文件(calendar.js、calendar-en.js、calendar-setup.js、calendar_1.png、calendar_system.css)。 现在我的问题是如何将这些文件链接到 javascript(我正在使用 ECLIPSE IDE),以便它以 dd/mm/yyyy 格式在日期的文本框旁边显示日历。 . .

我经历了很多事情,尝试过这些,但确实无法获得预期的输出。 下面是我目前实现的代码

     <html lang="en">
      <head>
       <style type="text/css" src="../datePickers/calendar-system.css">
        </style>
         </head>
        <body>
  <script language="Javascript" src="../Scripts/calendar.js"></script>

<h1>Report Generation</h1>

<div style="margin: 0 auto; width: 100%; text-align: left">

    <form name="date" action="<c:url value="cli.htm"/>"
        method="post" onSubmit="return ValidateForm()">
        <fieldset>
            <legend>Please enter Start Date and End Date</legend>

                <div style="text-align: center; margin: 150px auto 100px auto;">
    <label for="dateFrom">Start Date:</label> 
            <font color="#CC0000"><b>(dd/mm /yyyy)</b></font>
            <input type="text" name="dateFrom" maxlength="25" size="25"
                    id="dateFrom" /> 
    <img src = "../Images/calendar_1.png"   onclick="javascript:Calendar.setup(inputField,ifFormat,button) style="cursor: pointer" /> 
            </div>


    <div style="text-align: center; margin: 150px auto 100px auto;">
    <label for="dateTo">End Date:</label> 
            <font color="#CC0000"><b>(dd/mm/yyyy)</b></font>
    <input type="text" name="dateTo" maxlength="25" size="25"
                    id="dateTo" />
            </div>

            <div>
    <input type="submit" value="Generate Report" align="center" />
            </div>
    </form>
        </div>


           <script language="Javascript" >
            var dtCh= "/";
         var minYear=1900;
         var maxYear=2500;

         function isInteger(s){
     var i;
          for (i = 0; i < s.length; i++){   
     // Checking that the current character is number.
          var c = s.charAt(i);
         if (((c < "0") || (c > "9")))
        return false;
             }
 // All characters are numbers.
              return true;
                }

                function stripCharsInBag(s, bag){
          var i;
                  var returnString = "";
 // Search through string's characters one by one.
 // If character is not in bag, append to returnString.
                  for (i = 0; i < s.length; i++){   
             var c = s.charAt(i);
            if (bag.indexOf(c) == -1) returnString += c;
            }
            return returnString;
                         }

                  function daysInFebruary (year){

                    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400  == 0))) ? 29 : 28 );
                    }

                   function DaysArray(n) {
                for (var i = 1; i <= n; i++) {
           this[i] = 31
            if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
           if (i==2) {this[i] = 29}
                     }  
                    return this
                        }


                 function isDate(dtStr){

               var daysInMonth = DaysArray(12)
                var pos1=dtStr.indexOf(dtCh)
                var pos2=dtStr.indexOf(dtCh,pos1+1)
                 var strDay=dtStr.substring(0,pos1)
                 var strMonth=dtStr.substring(pos1+1,pos2)
                  var strYear=dtStr.substring(pos2+1)
                               strYr = strYear
                if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
for (var i = 1; i <= 3; i++) {
    if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
}
month=parseInt(strMonth)
day=parseInt(strDay)
year=parseInt(strYr)
if (pos1==-1 || pos2==-1){
    alert("The date format should be : dd/mm/yyyy");
    return false;
}
if (strMonth.length<1 || month<1 || month>12){
    alert("Please enter a valid month");
    return false;
}
if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
    alert("Please enter a valid day");
    return false;
}
if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
    alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear);
    return false;
}
if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))== false){
    alert("Please enter a valid date");
    return false;
}
       return true;
            }


              function ValidateForm(){
           var dt1=document.date.dateFrom
       var dt2=document.date.dateTo

        if (!isDate(dt1.value)){
    dt1.value='';
    dt1.focus();
    return false;
}
if(!isDate(dt2.value)){
    dt2.value='';
    dt2.focus();
    return false;
}


     return true
     }


    }
     </script>
  </body>
   </html>

我希望代码更改如下:

代码应初始化日历对象并将图像链接到文本字段(使用它们的 ID)以响应点击。

日历.setup( { inputField : "dateFrom", // 输入字段的 ID ifFormat : "%d/%m/%Y", // 日期格式 button : "imgCal" // 日历图片的 ID } );

如果我真的需要创建一个日历对象,我能知道在哪里吗?另外,我应该将 Calendar.setup 代码放在我的 jsp 页面的什么位置?

谁能帮我解决这个问题...

【问题讨论】:

    标签: javascript validation date calendar


    【解决方案1】:

    快速建议:您是否尝试过查看此页面。

    易于实施,您也可以查看演示。

    http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/

    **

    现在,查看您的代码;能否请您轻弹calender.setup(foo1, foo2...) 函数实现? (这是您定制的库吗?)

    谢谢,

    【讨论】:

    • 感谢您宝贵的 cmets。我已经浏览了你的链接,但不知道我应该做什么......你能找出代码中是否有任何错误或任何更改......calendar.setup.js 文件是库文件。我们是否需要为此创建一个对象?我认为应该只提到参数..你能否进一步解释我如何做到这一点?
    • 嗨,很高兴我能帮上忙,我们会到达那里:所以如果我能正确理解这一点,您希望日历出现在此文本框旁边,对吗?您可以将日历或图像的 css 作为该文本框旁边的隐藏 html 标记,并且当调用有效日期检查 [isDate in this case] 时,您可以根据该检查显示日历。 ** .show 或 .hide 基于您的日期验证?;希望这会有所帮助。
    • 你能举个例子或代码来说明它是如何工作的...谢谢!
    • 喂,别担心,伙计;给你 - 所以在你的文本框旁边添加这个元素。这将是您想要在日期有效时显示和隐藏的日历图像。 [代码:] 现在,当您检查日期是否有效时,在您的 isDate 函数中添加此行 [代码:] $("#imgidforyou").show() 如果日期无效,则; [代码:] $("#imgidforyou").hide() 希望这会有所帮助:关于单独的主题,但我强烈建议使用这里提到的 datepicker kelvinluck.com/assets/jquery/datePicker/v2/demo
    • 非常感谢您的耐心。 .!但不幸的是,我几乎找不到失败的代码..演示非常好..但我没有使用 jquery 来遵循这些程序。我相信它会造成很多混乱..!!我可以为我的代码提供更详细的视图/更改
    【解决方案2】:

    我正在尝试使用 HTML 和 Javascript 以 **YYYY\MM\DD 格式验证日期 希望它对您有所帮助... 尝试自己...

    < script type = "text/javascript" >
      function valdate() {
        var regdate = /^(19[0-9][0-9]|20[0-9][0-9])\/(0[1-9]|1[012])\/(0[1-9]|[12][0-9]|3[01])$/;
        if (form1.txtdate.value.match(regdate)) {
          return true;
        } else {
          alert("! please Enter the Date in this Format 'YYYY/MM/DD'");
          form1.txtdate.value = "";
          form1.txtdate.focus();
          return false;
        }
      } < /script>
    <from="form1" method="post" action="">
      <input name="txtdate" type="text" onblur="valdate()" maxlength="10" required />
      </form>

    如果有帮助,请投票......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 2010-09-29
      • 2022-01-11
      • 2020-02-23
      相关资源
      最近更新 更多