【问题标题】:Firebug: "The 'charCode' property of a keyup event should not be used. The value is meaningless."Firebug:“不应使用 keyup 事件的 'charCode' 属性。该值没有意义。”
【发布时间】:2010-08-25 16:25:13
【问题描述】:

我正在构建一个计算器,并且正在使用以下内容:

jQuery(function($) {
    $('#Quantity').keyup(function() {
        console.log($(this).val());
    });
});

Q1:keyup() 是使用正确的事件吗?

Q2:为什么 Firebug 告诉我“不应该使用 keyup 事件的 'charCode' 属性。该值没有意义”?我注意到它和我在 Stackoverflow 中输入这个问题时做的事情是一样的,所以我一定不能做太严重的错误。

【问题讨论】:

    标签: jquery


    【解决方案1】:

    之所以出现是因为 jQuery 使用自己的 event 对象而不是原生浏览器对象,并且在创建此对象的过程中会读取事件的所有可能属性,包括 charCode

    props = [ ... "charCode" ... ]
    
    for ( var i = this.props.length, prop; i; ) {
        prop = this.props[ --i ];
        event[ prop ] = originalEvent[ prop ];
    }
    

    Firefox 正确地警告您,在 keyup 事件的情况下您不想阅读 charCode,而没有意识到您只是在复制它,实际上并没有对它做任何事情。因此,您使用 jQuery keyup/keydown 处理程序创建的任何页面都会发出无休止的警告。

    (IMO,jQuery 不应该费心复制这个属性。在你真正想要使用它的唯一情况下——keypress——你可以使用普通的旧 which。)

    【讨论】:

      【解决方案2】:

      1) 是的,您使用了正确的事件与keyup,因此您获得了最新值。

      2) 您可以放心地忽略这个 Firebug 警告,它出现在许多 许多 应用程序中,并且是 how jQuery normalizes the .which property for events 的结果,firebug 应该对这个 IMO 更聪明一点。

      【讨论】:

      • 我宁愿 jQuery 在这方面更聪明一点。它不应该读取keyupkeydown 事件的charCode 属性。在任何情况下,which 属性对于 keypress 事件来说是更可取的。
      【解决方案3】:

      这不是直接回答您的问题,但可能会提供有用的信息。

      来自quirksmode.org

      keyCode 和 charCode

      这两个属性是keyCode和charCode。简单地说,keyCode 说明了用户按下的实际键盘键,而 charCode 给出了结果字符的 ASCII 值。这些信息位不必相同;例如,小写字母“a”和大写字母“A”具有相同的 keyCode,因为用户按下了相同的键,但由于结果字符不同,因此 charCode 不同。

      Explorer 和 Opera 不支持 charCode。但是,他们在keyCode中给出了字符信息,但只有onkeypress。 onkeydown 和 -up keyCode 包含密钥信息。

      我只能假设charCode 值是“没有意义的”,如果按下一个不打印字符的键(如箭头键)。此外,如果用户使用非英文键盘,charCode 可能与您的预期不同。但我不确定。

      【讨论】:

      • 并非如此。关键是charCode 对于keyupkeydown 事件没有意义,因为只有keypress 事件包含有关输入字符的信息(通过charCodewhich)。无论键盘类型如何,keypress 事件中的charCode 都有效; keydownkeyup 中的 keyCode 会因键盘类型而异,所以你弄错了。
      猜你喜欢
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 2012-08-11
      相关资源
      最近更新 更多