我正在使用 jQuery 绑定 keydown 事件,以允许文本框中的某些特定字符。我正在尝试使我的代码跨浏览器和平台兼容。我的主要问题是我找不到将接收到的键码映射到有效字符码的方法,特别是对于来自数字键盘的键码(小数分隔符,是逗号还是句点等) .
问问题
3195 次
3 回答
6
那是对的。您无法进行此类映射;akeydown
甚至可能不对应于插入的字符。或者 Caps Lock 可能会改变按键的含义,而您无法对此进行嗅探。和其他各种皱纹。
如果您想知道字符代码,您唯一的选择是使用keypress
事件。
于 2009-12-11T13:56:48.647 回答
1
好吧,如果您的问题是将键码转换为字符,为什么不让浏览器为您处理呢?这可能听起来很可怕,但你可以简单地让浏览器修改文本框(这样删除就是删除,句号就是句号),然后回去编辑它......嗯......也许是这样的:
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;
});
}
这种方法的最大问题是每个按下的键都会在屏幕上出现片刻。另一方面,使用 REGEX,您可以更好地控制允许输入的格式。在上面的示例中,我只允许正数或负数(带有可选的小数点)。如:“123”、“-123”、“-123.456”、“123.456”。
我知道这并不能真正回答您的问题,但它完全回避了这个问题!
于 2009-12-14T09:16:30.123 回答
1
好吧,就像我在评论中说的那样,这个问题背后的目标是过滤数值的文本框。我设法使用按键事件达到了我的目标。
我为那些对此解决方案感兴趣的人发布了一个jQuery 插件。
于 2009-12-15T09:41:29.217 回答