如何禁用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