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

表格文本框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);
    });
});

关键修改说明

  1. 用$('.input-to-sum')选择目标输入框,比id前缀更灵活,也避免了id重复的问题。
  2. 增加了输入值的合法性校验,防止空值或非数字导致计算错误。
  3. 限制了事件触发范围,只在目标输入框上响应按键,避免全局误触发。
  4. 合并了Enter和+键的逻辑,减少代码冗余。

内容的提问来源于stack exchange,提问作者Minervaz Mine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:28:34