我正在使用jQuery绑定keydown事件,以允许在文本框中输入特定字符。我正在尝试使我的代码跨浏览器和平台兼容。我的主要问题是,我找不到一种方法将接收到的键码映射到有效的字符码,特别是来自数字键盘的键码(小数分隔符,逗号还是句号等)。
我正在使用jQuery绑定keydown事件,以允许在文本框中输入特定字符。我正在尝试使我的代码跨浏览器和平台兼容。我的主要问题是,我找不到一种方法将接收到的键码映射到有效的字符码,特别是来自数字键盘的键码(小数分隔符,逗号还是句号等)。
没错,你无法进行这样的映射;keydown
甚至可能不对应任何插入字符。或者大写锁定键可能会改变按键的含义,并且你无法嗅探到它。还有其他一些问题。
如果想知道字符代码,你唯一的选择是使用 keypress
事件。
如果你的问题是将按键代码转换为字符,为什么不让浏览器为你处理呢?这听起来可能很糟糕,但你可以简单地允许浏览器修改文本框(使删除键是删除,句号是句号),然后再回去编辑它... 嗯...也许像这样:
function hookEvents() {
$('#myTextBox').oldValue = $('#myTextBox').value;
$('#myTextBox').bind('keyup', function(event) {
// Maybe nothing's changed?
if (event.target.oldValue == event.target.value) {
return;
}
var validInput = /(\-?[0-9]*(?:\.[0-9]*)?)/;
var input = event.target.value;
var result = validInput.exec(input);
if (result.index != 0 || result[result.length-1] != input.length)
{
event.target.value = result[0];
}
// update for later
event.target.oldValue = event.target.value;
});
}
就像我在评论中所说的那样,这个问题的目标是过滤文本框中的数字值。我使用了keypress事件来实现我的目标。
我已经发布了一个jQuery插件,供那些对解决方案感兴趣的人使用。
event.which
来获取字符。然后为IE的charCode-in-keyCode行为添加回退。例如:var c= 'which' in event? event.which : event.keyCode;
- bobince