jQuery中keypress事件绑定+键(键码107)失效问题求助
解决jQuery keypress事件中+键无法触发的问题
嘿,我来帮你搞定这个问题!你遇到的+键无法触发keypress事件的情况其实挺常见的,主要是因为keypress事件的设计逻辑和你对键码的理解有点偏差。
问题根源
keypress事件本质上是监听字符的输入,而不是物理按键的按下。这就导致不同场景下+键的对应码不一样:
- 小键盘上的+键,在keypress事件中
e.which的值确实是107 - 但主键盘上的+键(需要按住Shift+等号键输入),此时
keypress捕获到的是字符+的ASCII码,也就是43,而不是107
如果你的测试是按主键盘的+键,那自然不会触发e.which == 107的判断逻辑。另外,有些浏览器对非字符键的keypress支持也不太一致,这也可能是原因之一。
解决方案
给你两个靠谱的处理方案,根据你的需求选:
方案1:改用keydown事件监听物理按键
如果你想准确监听物理按键(不管是小键盘还是主键盘的+),keydown事件会更可靠,因为它捕获的是物理按键的状态,和字符输入无关:
$(document).ready(function(){ var result=0; $(document).keydown(function(e) { // 监听小键盘+(键码107)或者主键盘Shift+=(键码187+Shift键) if(e.which == 107 || (e.which == 187 && e.shiftKey)) { result += parseInt($('#date_a').val()); // 这里可以加你的其他逻辑 console.log(result); } // 回车键的逻辑保持不变 else if(e.which == 13) { // 回车键处理逻辑 } }); });
方案2:在keypress中监听字符的ASCII码
如果你还是想用keypress,可以直接判断字符+的ASCII码43,这样不管是主键盘还是小键盘输入的+,都会触发:
$(document).ready(function(){ var result=0; $(document).keypress(function(e) { // 监听字符+的ASCII码43 if(e.which == 43) { result += parseInt($('#date_a').val()); console.log(result); } else if(e.which == 13) { // 回车键处理逻辑 } }); });
小提示
你可以在事件里打印e.which和e.keyCode的值来验证:
$(document).keypress(function(e) { console.log('keypress which:', e.which); console.log('keypress keyCode:', e.keyCode); });
这样就能清楚看到你按下的键对应的实际码值,方便调试。
内容的提问来源于stack exchange,提问作者Jack Henaldy
相关产品推荐
相关产品推荐

