You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:07:15