如何在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绑定,不需要给每个新增的输入框重复加事件属性:
- 删掉
htmlAttributes里的onkeyup = "calculfac()"配置 - 新增事件绑定逻辑:
// 页面DOM加载完成后绑定事件 document.addEventListener('DOMContentLoaded', function() { document.addEventListener('keyup', function(e) { if (e.target.classList.contains('empHrs')) { calculfac(); } }); });
内容的提问来源于stack exchange,提问作者Alan Pauil
相关产品推荐
相关产品推荐

