我正在尝试写一些类似于'占位符'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
提供了按下的字符,但它并未在所有按键事件(如退格键)上激活。
答案 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”)。“
这是一个很好的来源,两个引号来自哪个可能会帮助你进一步混淆。
答案 3 :(得分:0)
您可以在按键事件上获取charcode,对于“退格”,“插入”等,您可以使用keydowns keyCode属性。