我正在尝试在以下过程中对用户文本输入进行信息验证keydown
事件。我试图验证的原因是keydown
事件是因为我不想显示那些被认为是非法的字符input
开头的盒子。
我写的验证是这样的,
function validateUserInput(){
var code = this.event.keyCode;
if ((code<48||code>57) // numerical
&&code!==46 //delete
&&code!==8 //back space
&&code!==37 // <- arrow
&&code!==39) // -> arrow
{
this.event.preventDefault();
}
}
我可以继续这样,但是我看到了这种实现的缺点。例如,这些是:
- 当我输入更多的条件来检查时,条件语句变得越来越长。
-
keyCodes
不同浏览器可能会有所不同。
- I have to not only check what is not legal but also have to check what are exceptional. In above examples, delete, backspace, and arrow keys are exceptional.
但我不想失去的功能是不显示输入textarea
除非通过验证。 (如果用户尝试在其中输入非法字符textarea
,什么都不应该出现)这就是为什么我不进行验证keyup
event.
所以我的问题是:
- 有没有更好的方法来验证输入
keydown
事件而不是检查keyCode
by keyCode
?
- 除了捕获用户输入之外还有其他方法吗
keydown
浏览器显示之前发生的事件?以及一种对其进行验证的方法?
如果您正在检查可打印的密钥(这正是您似乎正在做的事情),您应该使用keypress
相反,因为这是您能够获得有关按键所代表的字符的可靠信息的唯一地方。您无法可靠地检测数字按键keydown
事件。此外,抑制箭头键和删除/退格键也是一个坏主意。这样做你能得到什么?
还有一些错误:在 Firefox 中,您需要获取Event
传递到事件处理函数的参数中的对象,如果您使用的是 DOM0 事件处理函数而不是addEventListener()
or attachEvent()
,你应该使用return false;
抑制默认行为。这是我推荐的代码:
var input = document.getElementById("your_input_id");
input.onkeypress = function(evt) {
evt = evt || window.event;
var charCode = evt.which || evt.keyCode;
var charStr = String.fromCharCode(charCode);
if (/\d/.test(charStr)) {
return false;
}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)