【发布时间】:2010-12-25 15:56:05
【问题描述】:
我正在使用 jQuery 绑定 keydown 事件以允许文本框中的某些特定字符。我正在尝试使我的代码跨浏览器和平台兼容。我的主要问题是我找不到将接收到的键码映射到有效字符码的方法,特别是对于来自数字键盘的键码(小数分隔符,是逗号还是句点等) .
【问题讨论】:
标签: jquery cross-browser cross-platform jquery-events
我正在使用 jQuery 绑定 keydown 事件以允许文本框中的某些特定字符。我正在尝试使我的代码跨浏览器和平台兼容。我的主要问题是我找不到将接收到的键码映射到有效字符码的方法,特别是对于来自数字键盘的键码(小数分隔符,是逗号还是句点等) .
【问题讨论】:
标签: jquery cross-browser cross-platform jquery-events
好吧,就像我在 cmets 中所说的那样,这个问题背后的目标是根据数值过滤文本框。我设法使用按键事件达到了我的目标。
我已经为那些对解决方案感兴趣的人发布了jQuery plug-in。
【讨论】:
好吧,如果您的问题是将键码转换为字符,为什么不让浏览器为您处理呢?这听起来可能很可怕,但您可以简单地允许浏览器修改文本框(这样删除就是删除,句号就是句号),然后返回并编辑它......嗯......也许是这样的:
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”。
我知道这并不能真正回答你的问题,但它完全回避了这个问题!
【讨论】:
没错。您无法进行此类映射; keydown 甚至可能与插入的字符不对应。或者 Caps Lock 可能会改变按键的含义,而您无法对此进行嗅探。还有various other wrinkles。
如果您想知道字符代码,唯一的选择是使用keypress 事件。
【讨论】:
event.which 来获取字符。然后为 IE 的 charCode-in-keyCode 行为添加后备。例如。 var c= 'which' in event? event.which : event.keyCode;