如何添加一个字符到这个验证功能?
$(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
,而不是任何其他字符输入字母,但我希望它让我有_
(下划线)字符为好。如何添加一个字符到这个验证功能?
$('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
事件处理程序试图赶上无效字符前都输入到现场,以防止分心“跳跃”效应时显示无效字符和keyup
再次删除。请注意,event.which
包含由jQuery规范化的字符代码。
的keyup
处理是必要赶上了在使用按Ctrl-V(注意,不幸的是使用菜单选项编辑不赶输入>粘贴)输入的字符。在每keyup
(由其值改变引起)之后,需要额外的测试来停止输入字段回到其最左边的位置。现在只有在需要删除某些东西时才会重置其位置。
您可以在JSBin上进行测试。
这是最好的答案,因为需要下划线,shift键,标准化和所有爵士乐:) – 2010-09-08 13:19:55
现代浏览器有一个粘贴事件,它会过早触发,但是您可以使用setTimeout,从事件处理函数内部以零延迟方式捕获鼠标粘贴。 – Tgr 2010-09-08 22:08:30
检查这两个键码,Shift键,:
(key.shiftKey && key.keyCode == 109)
正如其他人更不用说了,如果你需要在客户端严格验证,你需要做的不仅仅是处理事件。
189是IE的关键代码; jQuery规范'event.which',它获得了代码109的分配。请参阅[.keydown()](http://api.jquery.com/keydown/)。 – 2010-09-07 23:55:56
将代码27添加到数组中?
27?你从哪里得到那27个? – 2010-09-07 23:53:40
nope it deosnt work – getaway 2010-09-08 00:02:54
“Ajax验证”?这与[Ajax]无关(http://en.wikipedia.org/wiki/Ajax_%28programming%29)。 – 2010-09-07 23:44:32
由于下划线字符需要移位,您的问题比“keydown”事件大。 – 2010-09-08 12:59:46