我将keydown事件与jQuery绑定在一起,以允许在文本框中使用某些特定字符。我正在尝试让我的代码跨浏览器和平台兼容。我的主要问题是,我找不到一种方法来将接收到的键码映射到有效的字符码,特别是来自数字键盘的键码(小数点分隔符,是逗号还是句号等)。
发布于 2009-12-15 09:41:29
正如我在评论中所说,这个问题背后的目标是根据数值过滤文本框。我设法通过按键事件达到了我的目标。
我已经为那些对这个解决方案感兴趣的人发布了一个jQuery plug-in。
发布于 2009-12-11 13:56:49
这是正确的。您不能进行这样的映射;keydown
甚至可能不对应于要插入的字符。或者Caps Lock可能会改变按键的含义,而你无法嗅探到这一点。和various other wrinkles。
如果您想知道字符代码,您唯一的选择就是使用keypress
事件。
发布于 2009-12-14 09:16:30
好吧,如果你的问题是键盘代码到字符的转换,为什么不让浏览器为你处理呢?这听起来可能很可怕,但您可以简单地允许浏览器修改文本框(这样delete就是delete,句点就是一个句点),然后返回并编辑它……嗯..。可能是这样的:
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”。
我知道这并没有真正回答你的问题,但它完全回避了这个问题!
https://stackoverflow.com/questions/1887874
复制相似问题