验证格里高利日期输入IE11

时间:2018-01-09 21:04:05

标签: javascript date internet-explorer-11

我尝试为特定日期计算创建日期输入。但有一些问题,我不知道如何处理。

需求是:

  • 格里高利输入格式(dd.mm.yyyy)
  • 自动设置日期点(这样您只需要输入数字)
  • 在隔离的网络区域与IE11兼容(没有连接到互联网,只是内联网)
  • 输入/自动更正时没有无效日期输入(no 31.02.2017,30.14.2017等)

如果日期正确,使用日期计算是没有问题的。但我的解决方案存在性能问题。如果我输入“快”,它不会自动设置点而不是检查它是否是有效日期。 当我点击输入字段时,我可以删除字段项,并且不能再设置日期点正确。

由于可能的日期范围很广(需要+ 1 - 100年),因此一个日期选择器不是一个好的选择,而且日期选择器总是慢于输入。

希望你能帮助我....

    <input type="text" id="inputStrafbeginn" autofocus MaxLength="10" onKeyUp="isNumberKey(event);" onblur="berechnungStrafzeit()">

    function dots(){
       var dateBox = document.getElementById('inputStrafbeginn')
       var chars = dateBox.value.length;
       var text = dateBox.value;

       if (chars == 1 || chars == 4 || chars == 7) {
           document.getElementById('errorOutputStrafbeginn').innerHTML=" (ddmmyyy)";
       }
       if (chars == 2) {
          if (text > 31 || text < 1)
          {
            dateBox.value = "";
            document.getElementById('errorOutputStrafbeginn').innerHTML="Kein gültiges Tagesdatum!";
          }
          else
          {
            dateBox.value = text + ".";
            document.getElementById('errorOutputStrafbeginn').innerHTML=" (ddmmyyy)";
          }

       }
       if (chars == 5) {
         var value=text.charAt(3)+text.charAt(4);
         if(value>12 || value < 1)
         {
           dateBox.value = text.charAt(0)+text.charAt(1)+".";
           document.getElementById('errorOutputStrafbeginn').innerHTML="Kein gültiges Monatsdatum!";
         }
        else
        {
          dateBox.value = text + ".";
          document.getElementById('errorOutputStrafbeginn').innerHTML=" (ddmmyyy)";
        }

       }

    }

    function isNumberKey(evt){
       var charCode = (evt.which) ? evt.which : evt.keyCode

       // CHECK IF NUMBER
       if((charCode >=48 && charCode<=57) || (charCode>=96 && charCode<=105)){
          //IF KEY IS A NUMBER CALL DOTS
          dots();
       }
       else if( charCode==8 || charCode==9){
          // LET LEFT RIGHT BACKSPACE AND DEL PASS charCode==37||charCode==39||charCode==46 ||
       }
       else{
          // BLOCK ALL OTHER KEYS
          evt.preventDefault();
       }
    }

1 个答案:

答案 0 :(得分:0)

您可以使用超时javascript指令“延迟”并控制用户设置日期的时间。如果你将它与onkeypress结合起来(检查是否按下数字键)让用户等待1秒(例如)按另一个键等等。

我建议你重新分析datepicker选项,因为你可以根据自己的需要自定义日期范围,并且它总是比使用键盘的数字键设置日期更具交互性/动态性