Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不允许在输入框中输入数字_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript 不允许在输入框中输入数字

Javascript 不允许在输入框中输入数字,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,嗨,我有一个接受数字的函数,但它有一些问题 1我希望它接受斜杠,即“/” 2在第一次输入时,出于某种原因,它接受字母 它绑定到一个knockout keyup函数 <input id="txtboxToFilter" type="text" placeholder="dd/mm/yyyy" maxlength="10" data-bind="value: Observable.birthdate(), valueUpdate: 'keyup', event: { keyup: Check

嗨,我有一个接受数字的函数,但它有一些问题

1我希望它接受斜杠,即“/”

2在第一次输入时,出于某种原因,它接受字母

它绑定到一个knockout keyup函数

 <input id="txtboxToFilter" type="text" placeholder="dd/mm/yyyy" maxlength="10" data-bind="value: Observable.birthdate(), valueUpdate: 'keyup', event: { keyup: CheckDate}" />
  function CheckDate(){
    document.getElementById('txtboxToFilter').onkeydown = function(evt) {
      var charCode = (evt.which) ? evt.which : evt.keyCode;
      if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
          return false;

      return true;

    }

  }
然后调用这个函数

 <input id="txtboxToFilter" type="text" placeholder="dd/mm/yyyy" maxlength="10" data-bind="value: Observable.birthdate(), valueUpdate: 'keyup', event: { keyup: CheckDate}" />
  function CheckDate(){
    document.getElementById('txtboxToFilter').onkeydown = function(evt) {
      var charCode = (evt.which) ? evt.which : evt.keyCode;
      if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
          return false;

      return true;

    }

  }

有人帮忙吗

您当然可以使用正则表达式:

这里有一个也将支持闰年:

^(?:(?:31(\/)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
JS代码:

document.getElementById('txtboxToFilter').onblur= function(e) {
    alert(validateDate(document.getElementById('txtboxToFilter').value));
    }


 function validateDate(dob) { 
    var re = /^(?:(?:31(\/)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/;
    return re.test(dob);
} 
小提琴:

注意:如果您愿意,我已将事件从keyup更改为blur 这是键盘上的…请相应更改


您将函数绑定到keyup,然后又绑定到keydown?出于某种原因,如果不这样做,它就无法工作。注意,标题似乎与您的帖子相矛盾。如果不允许使用数字,日期输入肯定会缺乏很多实用性。或者,通过数字,你指的是什么?看看如何处理键盘输入;您可以将regex用于'dd\mm\yyyy'格式:我们不能在1/01/1600:D之前出生