如何在jQuery中迭代多组对象列表计算每条住院记录的总费用
问题原因
你原来的代码使用$("input[id$='TariQuoti']")这类选择器时,当页面存在多个匹配元素,jQuery默认只会读取第一个匹配元素的值、赋值也只会作用到第一个匹配元素,所以仅第一条记录生效。
解决代码
你可以遍历所有住院记录条目,在每条记录的容器范围内单独查找对应字段计算:
function CalculMntTotHosp() { // 遍历所有住院记录的总费用输入框 $("input[id$='MntTotHosp']").each(function() { // 获取当前住院记录的父容器,确保仅查找当前条目的关联字段 // 下方的.hospitalisation-item请替换为你实际业务中包裹单条住院记录3个字段的公共父容器类名 const $currentItem = $(this).closest('.hospitalisation-item'); // 如果三个字段为同级元素,也可以直接用siblings查找,替换上面一行即可: // const tariQuoti = $(this).siblings("input[id$='TariQuoti']").val().replace(",", ".") || 0; const tariQuoti = $currentItem.find("input[id$='TariQuoti']").val().replace(",", ".") || 0; const nbJrsHosp = $currentItem.find("input[id$='NbJrsHosp']").val().replace(",", ".") || 0; // 增加非数字输入容错,避免计算结果出现NaN const tariNum = parseFloat(tariQuoti) || 0; const joursNum = parseFloat(nbJrsHosp) || 0; const mntTotHosp = tariNum * joursNum; // 赋值给当前条目的总费用字段 $(this).val(mntTotHosp.toFixed(2).replace(".", ",")); }); }
补充说明
如果你的表单是先分账户、再分住院记录的嵌套结构,只需要先遍历所有账户容器,再在每个账户内遍历住院记录条目即可,核心逻辑和上述代码一致,仅需要调整选择器的遍历层级。
内容的提问来源于stack exchange,提问作者user16511868
相关产品推荐
相关产品推荐

