【问题标题】:keyup event always return uppercase letterkeyup 事件总是返回大写字母
【发布时间】:2012-09-24 15:48:17
【问题描述】:

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

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

});

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

我知道keypress 给出了按下的字符,但它不会在所有按键事件(如退格)上激活。

【问题讨论】:

标签: javascript jquery


【解决方案1】:

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

您可以尝试keypress event.,尽管 jQuery 报告它并不总是表现出相同的跨浏览器。来自文档:

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

【讨论】:

  • 我已经看到了这一点,但我想也许有一种方法可以避免定义 2 个事件处理程序,一个用于退格等特殊键,另一个用于其他键。
  • 不幸的是没有。正如我所指出的,虽然您可以知道处于何种状态转换,但您无法准确跟踪浏览器内大写锁定的状态。
  • 好吧,那就难了:)
  • 只是补充一下我最近的发现:keypress() 没有被解雇 ni chrome 35 for Android。
  • 这可能已在 Chrome 38 中修复。
【解决方案2】:

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>

【讨论】:

    【解决方案3】:

    您需要在 onkeypress 上捕获您的按键事件,以便您可以访问字符代码。即使您想检测大写锁定/shift + 击键,它仍然会注册为两个单独的击键,因此难以确定大写 vrs 小写。

    一些重要的 KeyCode 注释:

    “在 onkeydown 或 onkeyup 事件期间访问 keyCode 属性时要小心,因为每当按下任何键时都会设置它,包括像“Shift”这样的非字符键。这意味着如果您尝试按“Shift+a”尝试获取“A”的keyCode,你最终会得到两个keyCode,一个用于“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

    【讨论】:

      【解决方案4】:

      您可以在按键事件中获取字符代码,对于“退格”、“插入”等,您可以使用 keydowns keyCode 属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-16
        • 2013-09-15
        • 2023-04-09
        • 1970-01-01
        • 2013-09-02
        • 1970-01-01
        相关资源
        最近更新 更多