JQueryvalidation代码不允许删除输入的文本

我从这个问题中借了一些代码(见答复4):

如何使用jquery阻止或限制输入字段中的特殊字符?

但是,在使用代码时,似乎虽然它在您整齐排序时进行validation,但它不允许您编辑您输入的任何内容。

$('input').bind('keypress', function (event) { var regex = new RegExp("^[a-zA-Z0-9]+$"); var key = String.fromCharCode(!event.charCode ? event.which : event.charCode); if (!regex.test(key)) { event.preventDefault(); return false; }}); 

我有点困惑,我试图通过将按键更改为keyup来调整它,但这只会阻止validation工作。 任何指针都会被慷慨接受。

这似乎是一个特定于浏览器的问题。 在Firefox中,keypress包括退格键和箭头键等元键,而Chrome则不包括。 如果你稍微调整你的逻辑以更喜欢哪个超过charCode(我认为最好支持它),你最终得到这个

 $('input').bind('keypress', function(event) { var regex = new RegExp("^[a-zA-Z0-9]+$"); var code = event.charCode === 0 ? event.which : event.charCode; var key = String.fromCharCode(code); if (!regex.test(key) && code !== 8) { // 8 is ascii code for backspace event.preventDefault(); return false; } }); 

这个小提琴还写入控制台键入和键入事件时键入的代码。 http://jsfiddle.net/Q2MWS/5/

我认为event.preventDefault()阻止编辑输入的字符,如果它们与正则表达式不匹配。 检查event.which / event.charCode是否有其他值,如退格键,空格,小数点键等