keyup事件总是返回大写字母

时间:2012-09-24 15:48:18

标签: javascript jquery

我正在尝试写一些类似于'占位符'polyfill的东西。我想在输入字段上捕获keyup事件并获取用户输入的char,所以我有这个代码:

 $elem.on('keyup',function(e){  
    var $this = $(this),    
        val = $this.val(),
        code = (e.keyCode ? e.keyCode : e.which);
    console.log(String.fromCharCode(code));

});

问题是这总是返回按下的char的大写版本,我怎么知道按下的char是大写还是小写?

我知道keypress提供了按下的字符,但它并未在所有按键事件(如退格键)上激活。

4 个答案:

答案 0 :(得分:13)

您无法从keyup轻松获取此信息,因为keyup只知道正在按哪些键,而不是键入哪些字母。您可以检查Shift键是否已关闭,您也可以尝试自行跟踪大写锁定,但如果有人在浏览器外按下它,您最终会得到错误的大小写字符。

你可以尝试keypress event.,虽然jQuery报告它并不总是表现出相同的跨浏览器。来自doc:

  

请注意,keydown和keyup提供了一个指示哪个键的代码   按下,而按键表示输入了哪个字符。对于   例如,keydown和keyup将小写的“a”报告为65,   但按键按97。所有人都报告大写“A”为65   事件。由于这种区别,在捕捉特殊击键时   例如箭头键,.keydown()或.keyup()是更好的选择。

答案 1 :(得分:3)

keyup只知道按下的键,而不是附加条件(在这种情况下,如果是大写/小写)。请尝试keypress事件(我已将示例中的文档用于演示 - 将其更改为所需元素)

例如:

<script type="text/javascript">

$(document).on('keypress',function(e) {  
    var $this = $(this),    
        val = $this.val(),
        code = e.keyCode || e.which;
    console.log(String.fromCharCode(code));
});

</script>

答案 2 :(得分:2)

您需要捕获关键事件onkeypress,以便您可以访问字符代码。即使你想检测一个大写锁定/ shift +击键,它仍会记录为两个单独的按键,这使得很难确定uper vrs小写。

一些重要的KeyCode说明:

“在onkeydown或onkeyup事件期间访问keyCode属性时要小心,因为只要按下任何键就会设置它,包括非”Shift“等非字符键。这意味着如果你试图按”Shift + a“来尝试获取“A”的keyCode,你将总是得到两个keyCodes,一个用于“Shift”,一个用于“A”,不管是“a”的keyCode,因为keyCode总是返回字符大写版本的unicode值。要获得“a”(小写)的keyCode,你必须探测IE中onkeypress事件期间返回的keyCode,因为Firefox在onkeypress期间没有设置keyCode ,切换到e.charCode或e.which而不是该浏览器。“

一些重要的CharCode注意到:

“返回onkeypress事件期间按下的键的字符代码。仅设置与字符关联的键(即:”a“,”b“或”z“)。没有像“Shift”或“Ctrl”这样的字符关联不符合条件。其他要点:   - 为大写和小写字符返回不同的值(即:“a”与“A”)。“

这是一个很好的来源,两个引号来自哪个可能会帮助你进一步混淆。

Keycods and charcodes

答案 3 :(得分:0)

您可以在按键事件上获取charcode,对于“退格”,“插入”等,您可以使用keydowns keyCode属性。