2011-11-06 39 views
0

我正在寻找一种方法将按键转换为与字符对应的字符串。例如:将KeyDown keycode转换为字符串(jQuery)

$(document).keydown(function(event) { 
    console.log(String.fromCharCode(event.which)); 
}); 

除了这段代码没有考虑大小写,并且不适用于特殊字符,例如, “”。这:

$(document).keypress(function(event) { 
    console.log(String.fromCharCode(event.which)); 
}); 

似乎的伎俩,但它不能阻止默认浏览器的操作(如反悔退格键),而且似乎是浏览器的兼容问题。

有没有更好的方法,适用于浏览器和键盘布局?

回答

5

keypress以外的事件类型中无法可靠地获取event.which属性中的字符。

如果您在质疑该声明,请使用演示this pageevent.which属性只能在keypress事件中正确转换。

如果您想忽略大写字母,请使用.toLowerCase()方法。

+0

Downvoted是什么原因?答案是正确的:'event.which'在'keydown'事件中为'@'和'2'保持相同的值,而'keypress'事件为'@'返回正确的charCode。 –

+0

也许是因为你没有回答实际的问题,这是如何防止默认的浏览器操作。你可能是对的,但它仍然没有回答这个问题。我建议您将其扩展为包含默认操作的解决方案。 –

+0

@FelixKling我不同意这是主要问题。 –

0

您可以使用相同的技巧来获取与按键相对应的字符代码。为了防止默认浏览器的行为,你可以试试这个 -

event.preventDefault(); //For all major browsers 

event.returnValue = false; //For Internet Explorer 
+0

或者只是从处理程序中返回false# –

+0

您是否真的看过这个问题? – Maarten

+0

@Maarten - 我读过这个问题,我从中得出的结论是你已经找到了一种方法来从事件中获得正确的密钥代码,并希望采用跨浏览器的方式来防止默认的密钥操作。如果我的理解不正确,不好意思。我建议的方式实际上可以防止跨浏览器的默认密钥操作。 – asandeep

1

这并不奇怪,​​事件是不是给你大写字母,因为它是由SHIFT键,这可能会或可能不会在时间按下控制。

为了防止默认浏览器操作,只需从您的处理程序中返回false。

你有什么浏览器兼容性问题?