You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动