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

如何在Html.EditorFor生成的表格列中调用JavaScript的onkeyup函数

问题根因

你的onkeyup事件参数配置位置错误,@Html.EditorFor的自定义DOM属性需要放到htmlAttributes对象内,你现在把onkeyup和htmlAttributes平级配置,最终渲染到页面的输入框并不会生成onkeyup属性,所以事件无法触发。

第一步:修正Razor代码

调整NetHrs列的EditorFor参数,把onkeyup移入htmlAttributes:

<td>@Html.EditorFor(model => model.NetHrs, new { 
    htmlAttributes = new { 
        type = "number", 
        @class = "form-control  w-100 empHrs",
        onkeyup = "calculfac()" 
    } 
})</td>
第二步:完善calculfac函数实现

你给该列输入框统一加了empHrs类,直接通过类选择器遍历所有该列输入框,就能收集所有数值:

function calculfac() {
    // allNetHrs即为NetHrs列所有有效数字组成的数组
    var allNetHrs = Array.from(document.querySelectorAll('.empHrs'))
        .map(input => parseFloat(input.value.trim()))
        .filter(num => !isNaN(num));
    
    // 后续可直接使用allNetHrs变量处理逻辑
    console.log(allNetHrs); // 测试可打开控制台查看输出结果
}
可选优化(推荐)

如果你的表格支持动态新增行,建议用事件委托替代内联onkeyup绑定,不需要给每个新增的输入框重复加事件属性:

  1. 删掉htmlAttributes里的onkeyup = "calculfac()"配置
  2. 新增事件绑定逻辑:
// 页面DOM加载完成后绑定事件
document.addEventListener('DOMContentLoaded', function() {
    document.addEventListener('keyup', function(e) {
        if (e.target.classList.contains('empHrs')) {
            calculfac();
        }
    });
});

内容的提问来源于stack exchange,提问作者Alan Pauil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:18:00