JS计算结果页面加载时不自动填充,仅鼠标交互后显示如何解决
问题根因
你当前的问题是由两个核心错误导致的:
window.onload绑定逻辑错误:你写的window.onload = AdminFeee()属于立即执行函数,会直接运行一次函数后把返回值(undefined)赋值给onload事件,而非把函数绑定为页面加载完成后的触发回调。同时你两次给window.onload赋值,后定义的findTotal绑定会直接覆盖前一次的AdminFeee绑定,最终两个函数都没有被正确绑定到页面加载事件上,只有鼠标移动触发onMouseMove事件时才会执行计算。- 计算顺序错误:你没有保证页面加载时先计算管理费、再计算总计的执行顺序,单独执行某一个函数也无法得到正确的最终结果。
修复方案
步骤1:统一绑定页面加载事件
把两段JavaScript逻辑合并,避免重复赋值window.onload,正确绑定加载回调:
// 计算管理费 function AdminFeee() { var pullValue = document.getElementById('res').value || "0"; var output = (5/100) * parseFloat(pullValue); if (!isNaN(output)) { document.getElementById('calculateAdminFee').value = output; } } // 计算总计 function findTotal() { var one = document.getElementById('res').value || "0"; var two = document.getElementById('calculateAdminFee').value || "0"; var output2 = parseFloat(one)-parseFloat(two) ; if (!isNaN(output2)) { document.getElementById('calculateTotal').value = output2; } } // 正确绑定页面加载事件,按顺序执行两个计算函数 window.onload = function() { AdminFeee(); findTotal(); }
步骤2:优化输入框事件绑定
去掉冗余的onMouseMove事件(鼠标移动反复触发计算会造成不必要的性能损耗),修正onKeyUp的写法:
@Html.TextBox("AdminFeeWorkPlan", "", "{0:c}", new { @class = "form-control", id = "calculateAdminFee", @onKeyUp = "findTotal()" })
可选优化
如果id为res的是输入基础数值的文本框,建议给它也加上绑定,修改基础值时就能自动更新两个计算结果:
// 给id为res的输入框添加该属性即可 @onKeyUp = "AdminFeee();findTotal();"
内容的提问来源于stack exchange,提问作者Jass Sanghera
相关产品推荐
相关产品推荐

