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

CodeIgniter表单动态新增行后列数据求和功能异常问题咨询

异常原因

核心问题是动态生成元素的事件绑定失效:

  • 当前求和逻辑采用直接绑定写法$('[id^=nonclinsub]').on('keyup',function(){...}),该绑定仅会在页面初次加载完成时,给当时已存在的DOM元素挂载keyup触发事件。
  • 后续通过「添加更多」按钮新增的输入框是页面加载完成后动态插入的元素,没有被绑定求和触发事件,因此在新增行输入时不会触发求和逻辑。
  • 你遇到的三种现象完全符合该逻辑:
    1. 第一行是页面初始渲染的元素,已绑定事件,输入时正常触发求和
    2. 新增行未绑定事件,输入时无反应,总计不会更新
    3. 在原始第一行输入时触发了绑定的事件,事件逻辑会遍历所有符合id规则的输入框(包含新增行),因此能得到正确总和

修复方案

将直接事件绑定改为事件委托写法,把事件绑定在页面加载时就存在、不会被动态移除的父级元素上(此处用document即可),后续所有新增的符合规则的元素都会自动触发绑定的事件逻辑。

修改后的求和脚本如下:

$(document).ready(function(){ 
    // 总测试数求和逻辑,用事件委托绑定
    $(document).on('keyup', '[id^=nonclinsub]', function() {
        var total = 0;
        $('[id^=nonclinsub]').each(function(){
            total += parseFloat($(this).val() || 0);
        });
        $('#amt_nonclinsub_1').val(total.toFixed(0));
    });

    // 确诊数求和逻辑,用事件委托绑定
    $(document).on('keyup', '[id^=subdx]', function() {
        var total = 0;
        $('[id^=subdx]').each(function(){
            total += parseFloat($(this).val() || 0);
        });
        $('#amt_subdx_2').val(total.toFixed(0));
    });
});

可选优化

你可以直接用输入框已有的类名代替id前缀选择器,性能更稳定:

  • 总测试数输入框类名为amount_non_clin,可将[id^=nonclinsub]替换为.amount_non_clin
  • 确诊数输入框类名为amount_non_clin_dx,可将[id^=subdx]替换为.amount_non_clin_dx

内容的提问来源于stack exchange,提问作者Roberto Raymon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:45:08