$(function(){
$('input[name="username"]').keydown(function(key){
if (jQuery.inArray(key.keyCode,
[8,37,39,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90])
== -1 || key.shiftKey ){
return false;
}
});
});
这样做是对文本字符的Ajax验证,它只允许我输入来自a-z
和0-9
的字母,而不是任何其他字符,但我希望它允许我{{1也是(下划线)字符。
答案 0 :(得分:3)
$('input[name="username"]').keypress(function(event) {
var k = event.which;
/* 0: non-input keys
8: backspace
48-57: 0-9
97-122: a-z
95: _ */
if (k != 0 && k != 8 && k != 95 &&
(k < 48 || k > 57) && (k < 97 || k > 122))
return false;
});
$('input[name="username"]').keyup(function() {
var inp = $(this).val();
if (inp.match(/[^a-z0-9_]/g))
$(this).val(inp.replace(/[^a-z0-9_]/g, ''));
});
keypress
事件处理程序在输入字段之前尝试捕获无效字符,以防止在显示无效字符和{{1}时出现分散注意力的“跳跃”效果被删除了。请注意,keyup
包含由jQuery标准化的字符代码。
keyup
处理程序是捕获使用 Ctrl-V 输入的字符所必需的(请注意,遗憾的是它没有使用菜单选项Edit&gt; Paste来捕获输入)。额外的测试是必要的,以阻止输入字段在每event.which
之后返回其最左侧位置(由更改其值引起)。现在它只会在有东西被移除时重置它的位置。
您可以在JSBin上进行测试。
答案 1 :(得分:2)
稍微更易读的方法是
$('input[name="username"]').keydown(function() {
$(this).val($(this).val().replace(/[^a-zA-Z0-9_]/g, ''));
});
另请注意,验证keydown事件不会阻止某人使用鼠标复制/粘贴任何txt。
答案 2 :(得分:0)
检查keyCode和shiftKey:
(key.shiftKey && key.keyCode == 109)
正如其他人所说,如果您需要在客户端进行严格的验证,那么您需要做的不仅仅是处理keydown
事件。
答案 3 :(得分:0)
将代码27添加到数组中?