表格文本框keypress事件:Enter键正常+键无效问题求助
解决+键无响应及代码优化方案
我来帮你排查下+键没响应的问题,同时顺便修正代码里的其他潜在bug,让功能更稳定:
问题根源分析
你的代码里有几个关键错误导致+键失效,还有一些不符合规范的地方:
- 选择器错误:
$('input[id="input[]"]')根本选不到任何输入框,实际你的输入框id是input9、input10这类,得用前缀匹配选择器才能正确选中目标元素。 - 循环逻辑错误:
for (i = 0; i < textboxes; i++)里的textboxes是jQuery对象,不是长度数值,循环条件不成立,自然不会执行累加逻辑。 - 元素获取方式错误:
$('#input[i]')这种写法无法正确拼接选择器,jQuery识别不了这种变量嵌入的格式。 - 重复ID问题:HTML里每行的三个输入框用了同一个id(比如
input9出现三次),这违反了HTML规范,id必须唯一,会导致后续选择元素时出现不可预料的问题。 - 累加逻辑冗余:原来的代码每次按键都遍历所有输入框重复累加,逻辑上不合理,应该根据需求要么重新计算总和,要么只累加当前输入框的值。
修正后的代码(推荐版本)
先修正HTML的重复ID问题,给每个输入框分配唯一id,同时用class标记需要参与计算的输入框(更灵活):
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table id="table_data" class="table table-bordered" width="90%"> <tbody> <tr> <td>643301</td> <!-- ...其他td内容... --> <td><input type="text" name="input9_1" id="input9_1" size="2" class="input-to-sum"></td> <td><input type="text" name="input9_2" id="input9_2" size="2" class="input-to-sum"></td> <td><input type="text" name="input9_3" id="input9_3" size="7" class="input-to-sum"></td> </tr> <!-- ...其他行同理修改id... --> </tbody> </table>
然后是优化后的JS代码,实现按下Enter或+键时,累加当前聚焦输入框的值到结果,并显示在#date_awal中:
$(document).ready(function() { let result = 0; // 用class选择所有需要参与计算的输入框 const sumInputs = $('.input-to-sum'); $(document).keypress(function(e) { // 只处理目标输入框的按键事件,避免全局触发 if (!$(e.target).is(sumInputs)) return; const inputVal = $(e.target).val().trim(); // 过滤空值和非数字内容,防止NaN if (!inputVal || isNaN(inputVal)) return; // 匹配Enter键(13)或+键(43) if (e.which === 13 || e.which === 43) { result += parseInt(inputVal, 10); $('#date_awal').val(result); // 可选:清空当前输入框,方便继续输入 $(e.target).val(''); // 阻止Enter键的默认行为(比如提交表单) e.preventDefault(); } }); });
如果你的需求是重新计算所有输入框的总和
如果你希望按下按键时,重新计算所有输入框的数值总和(而不是累加当前输入框),可以用这个版本:
$(document).ready(function() { const sumInputs = $('.input-to-sum'); $(document).keypress(function(e) { if (e.which !== 13 && e.which !== 43) return; let total = 0; sumInputs.each(function() { const val = $(this).val().trim(); if (val && !isNaN(val)) { total += parseInt(val, 10); } }); $('#date_awal').val(total); }); });
关键修改说明
- 用
$('.input-to-sum')选择目标输入框,比id前缀更灵活,也避免了id重复的问题。 - 增加了输入值的合法性校验,防止空值或非数字导致计算错误。
- 限制了事件触发范围,只在目标输入框上响应按键,避免全局误触发。
- 合并了Enter和+键的逻辑,减少代码冗余。
内容的提问来源于stack exchange,提问作者Minervaz Mine
相关产品推荐
相关产品推荐

