JavaScript函数已定义却提示未定义问题排查求助
checkScheduleAndAmount未定义错误的解决方案 让我们一步步拆解这个问题,从你的代码和描述来看,有几个容易被忽略的点可能导致函数无法被页面识别:
1. 脚本标签的语法错误(最可能的原因)
看你提供的函数代码里,脚本标签写了< script和</ script>(标签与尖括号之间有多余空格),这会导致浏览器无法正确识别这个脚本块,函数根本没有被加载到页面中。
修复方法:
去掉标签内的多余空格,改成标准的脚本标签格式:
<script language="javascript" type="text/javascript"> // fuction added for click on submit - dp0jmr 05/23/2018 function checkScheduleAndAmount() { // 函数内容 } </script>
2. JavaScript类型转换语法错误(Java语法误用)
你的代码里用了Java风格的(double)来转换值,这在JavaScript里是无效语法,会导致脚本解析失败,整个函数都无法被定义(浏览器遇到语法错误会终止当前脚本的执行)。
修复方法:
换成JavaScript的parseFloat()或Number()来处理数值转换,同时注意处理innerText可能包含的非数字字符(比如千分位逗号):
function checkScheduleAndAmount() { // 转换后端传入的值 var ppAmt = parseFloat('<%=p.getPaymentPlanAmt()%>'); // 处理页面文本,移除可能的逗号 var totalText = document.getElementById("sum").innerText.replace(/,/g, ''); var totalamt = parseFloat(totalText); // 额外判断:如果转换失败(比如文本不是数字),也给出提示 if (isNaN(ppAmt) || isNaN(totalamt)) { alert("无法正确读取金额数据,请刷新页面重试。"); return false; } if (ppAmt !== totalamt) { alert("The Payment Plan Schedule does not add up to the total Payment Plan Amount - this Payment Plan cannot be submitted." + " Please correct the Amounts entered and submit the Payment Plan Schedule before leaving this page." + "\n\nIf the Date Range you have entered does not allow you to enter the Plan you desire, please End this Payment Plan " + "and begin a new one." + "\n\nIf you know the installment amount you wish to use, you can enter an installment amount at the start of a new " + "Payment Plan, and the application will calculate the final payoff date for you. "); return false; } else { return true; } }
3. jQuery优化导致的作用域问题
如果优化后的代码把这个函数放到了jQuery的$(document).ready()回调(或其他闭包)里面,函数会变成局部作用域,而内联的onclick是在全局作用域调用的,自然找不到这个函数。
修复方法:
把函数暴露到全局作用域,比如挂载到window对象上:
$(document).ready(function() { window.checkScheduleAndAmount = function() { // 函数内容 }; });
或者更推荐的方式:移除内联的onclick,用jQuery绑定点击事件,避免作用域问题:
$(document).ready(function() { // 绑定提交按钮的点击事件 $('input[type="submit"].button').on('click', function() { return checkScheduleAndAmount(); }); // 定义函数(这里可以是局部作用域,因为绑定事件时能访问到) function checkScheduleAndAmount() { // 函数内容 } });
同时记得移除按钮标签里的onclick="return checkScheduleAndAmount()"属性。
4. 脚本加载顺序问题
如果优化后调整了脚本的位置,导致函数定义的脚本块在按钮之后加载,那么点击按钮时函数还没被解析定义。
修复方法:
确保函数定义的脚本块放在按钮标签之前,或者用上面提到的jQuery事件绑定方式(依赖DOM加载完成后执行,不受顺序影响)。
5. 其他脚本错误中断执行
优化后的jQuery代码如果存在语法错误或运行时错误,可能会导致整个页面的JavaScript执行中断,进而影响后面的函数解析。
排查方法:
打开浏览器开发者工具(F12)的控制台,查看是否有其他红色错误提示,先修复这些错误,再测试函数是否能正常调用。
内容的提问来源于stack exchange,提问作者Zibbobz




