Firebug:“不应使用keyup事件的’charCode’属性。 这个价值毫无意义。“

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

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

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

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

看来是因为jQuery使用自己的event对象而不是本机浏览器,并且在创建此对象的过程中会读取事件的每个可能属性,包括charCode

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

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

(IMO,jQuery不应该打扰复制这个属性。在唯一的情况下你实际上想要使用它 – keypress – 你可以只使用普通的旧的。)

1)是的,您正在使用带有keyup的正确事件,因此您可以获得最新值。

2)你可以放心地忽略这个Firebug警告,它出现在很多很多应用程序中,并且是jQuery如何规范事件的.which属性的结果,firebug对这个IMO应该更聪明一些。

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

来自quirksmode.org :

keyCode和charCode

这两个属性是keyCode和charCode。 Put(太)简单地说,keyCode说明了用户按下的实际键盘键,而charCode给出了结果字符的ASCII值。 这些信息不一定相同; 例如,小写’a’和大写’A’具有相同的keyCode,因为用户按下相同的键,但是不同的charCode,因为结果字符是不同的。

Explorer和Opera不支持charCode。 但是,它们在keyCode中提供字符信息,但只提供onkeypress。 Onkeydown和-up keyCode包含关键信息。

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