如何禁用JavaScript表单验证中的键盘输入

如何禁用JavaScript表单验证中的键盘输入,javascript,html,Javascript,Html,我想验证一个文本框,以便它只接受数值。如果用户试图按字母键,则必须忽略按键,即无法键入任何内容 如何做到这一点 您可能需要使用onkeypress事件 此处可以找到一个与此相反的示例(输入字段接受除数字以外的所有内容):您可能需要使用onkeypress事件 这里可以找到一个做相反事情的例子(输入字段接受除数字以外的所有内容):类似的事情怎么样 //Bind this keypress function to all of the input tags $("input").keypress(f

我想验证一个文本框,以便它只接受数值。如果用户试图按字母键,则必须忽略按键,即无法键入任何内容


如何做到这一点

您可能需要使用
onkeypress
事件


此处可以找到一个与此相反的示例(输入字段接受除数字以外的所有内容):

您可能需要使用
onkeypress
事件


这里可以找到一个做相反事情的例子(输入字段接受除数字以外的所有内容):

类似的事情怎么样

//Bind this keypress function to all of the input tags
$("input").keypress(function (evt) {
//Deterime where our character code is coming from within the event
var charCode = evt.charCode || evt.keyCode;
if (IsNumeric(charCode)) { //key's keycode
return false;
}
});

类似的东西怎么样

//Bind this keypress function to all of the input tags
$("input").keypress(function (evt) {
//Deterime where our character code is coming from within the event
var charCode = evt.charCode || evt.keyCode;
if (IsNumeric(charCode)) { //key's keycode
return false;
}
});

在HTML页面中使用以下代码:

    <HTML>
   <HEAD>
   <SCRIPT language=Javascript>
      <!--
      function isNumberKey(evt)
      {
         var charCode = (evt.which) ? evt.which : event.keyCode
         if (charCode > 31 && (charCode < 48 || charCode > 57))
            return false;

         return true;
      }
      //-->
   </SCRIPT>
   </HEAD>
   <BODY>
      <INPUT id="txtChar" onkeypress="return isNumberKey(event)" type="text" name="txtChar">
   </BODY>
</HTML>

在HTML页面中使用以下代码:

    <HTML>
   <HEAD>
   <SCRIPT language=Javascript>
      <!--
      function isNumberKey(evt)
      {
         var charCode = (evt.which) ? evt.which : event.keyCode
         if (charCode > 31 && (charCode < 48 || charCode > 57))
            return false;

         return true;
      }
      //-->
   </SCRIPT>
   </HEAD>
   <BODY>
      <INPUT id="txtChar" onkeypress="return isNumberKey(event)" type="text" name="txtChar">
   </BODY>
</HTML>


W3C建议使用
oninput
事件,这是未来的证明,可以保护没有键盘的设备。如果您的目标浏览器支持
oninput
,请不要使用任何键盘事件。

W3C建议使用
oninput
事件,该事件经得起未来的考验,并负责处理没有键盘的设备。如果您的目标浏览器支持
oninput
,请不要使用任何键盘事件。

在现代浏览器中使用HTML5,您可以使用
(有关一些示例,请参阅)。不过,对于较旧的浏览器,您需要一个后备方案,所以现在就开始吧。这适用于所有主流浏览器。但是,它不会阻止用户粘贴或拖动非数字内容

jsFiddle:


在现代浏览器中使用HTML5,您可以使用
(有关一些示例,请参阅)。不过,对于较旧的浏览器,您需要一个后备方案,所以现在就开始吧。这适用于所有主流浏览器。但是,它不会阻止用户粘贴或拖动非数字内容

jsFiddle:


您可以创建一个javascript函数,在每次按下文本框中的某个键时调用该函数(使用onkeypress事件)

函数isNumberKey(evt)
{
var charCode=(evt.which)?evt.which:event.keyCode
如果(字符码>31&(字符码<48 | |字符码>57))
返回false;
返回true;
}

您可以创建一个javascript函数,每次按下文本框中的某个键时(使用onkeypress事件)都会调用该函数

函数isNumberKey(evt)
{
var charCode=(evt.which)?evt.which:event.keyCode
如果(字符码>31&(字符码<48 | |字符码>57))
返回false;
返回true;
}

我最近也遇到了同样的情况(但恰恰相反——我只想要字母字符)。我最初考虑只使用
keypress
事件,但这有几个致命缺陷:

  • 用户仍然可以将无效数据粘贴到字段中
  • 用户可以将无效文本拖到字段中
  • 取消按键会使某些有效输入(例如热键)无效,除非您特别注意元键(我不确定这是以可靠、完整和便携的方式实现的)
  • 自动完成
  • 等等,适用于任何数量的非键盘输入法

幸运的是,至少Firefox和IE9有一个解决方案:它们有一个
input
事件,可以触发任何形式的输入方法,无论是击键还是粘贴操作或其他什么。IE我最近也遇到了同样的情况(但恰恰相反——我只想要字母字符)。我最初考虑只使用
keypress
事件,但这有几个致命缺陷:

  • 用户仍然可以将无效数据粘贴到字段中
  • 用户可以将无效文本拖到字段中
  • 取消按键会使某些有效输入(例如热键)无效,除非您特别注意元键(我不确定这是以可靠、完整和便携的方式实现的)
  • 自动完成
  • 等等,适用于任何数量的非键盘输入法

幸运的是,至少Firefox和IE9有一个解决方案:它们有一个
input
事件,可以触发任何形式的输入方法,无论是击键还是粘贴操作或其他什么。我同意,但是IE<9中不支持它,它是不可取消的。@Tim它实际上不需要取消——只需适当地调整元素的
。@user349433:在事件触发后调整输入的值需要在事件发生前立即了解其值,并进行可能复杂的比较。@Tim:不一定。例如,对于这个特定的问题,您可以只做
this.value=this.value.replace(/\D+/g')
。我同意,但是IE<9中不支持它,它是不可取消的。@Tim它实际上不需要取消——只需适当地调整元素的
。@user349433:在事件触发后调整输入的值需要在事件发生前立即了解其值,并进行可能复杂的比较。@Tim:不一定。例如,在这个特定的问题中,您可以只做
this.value=this.value.replace(/\D+/g',)
。我不确定
textInput
事件是否会在
input
事件存在后获得更多的吸引力(顺便说一句,它是在WebKit和Opera中实现的).既然
input
事件已经存在(顺便提一下,它是在WebKit和Opera中实现的),我不确定
textInput
事件是否会获得更多的吸引力。何必麻烦呢?您只关心表单发布时该字段是否有效,而不管它同时具有什么值。请尝试使用onchange和隐藏输入。每次他们更改输入(例如复制粘贴/类型)时,它都应该运行您的脚本。如果输入有效,则将更改提交到隐藏的输入oth