You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Model Driven Apps多行文本框邮箱JS验证报错:new.formOnLoad方法不存在

问题排查与代码修改方案

一、触发错误的核心原因:函数名不匹配

错误提示明确指出找不到new.formOnLoad方法,但你的Web资源中定义的函数是valemail,二者不匹配。解决方式二选一:

  • 在Model Driven Apps的表单编辑器事件设置中,把绑定的函数名改成valemail
  • 把代码里的函数名从valemail修改为formOnLoad

二、代码逻辑的关键修正点

1. 未调用核心验证逻辑

你定义了validateEmails.execute方法,但外层函数valemail里没有触发它,导致验证代码根本不会运行。需要在函数末尾添加调用:

validateEmails.execute(executionContext);

2. 转义字符语法错误

代码中的<、"是HTML实体,直接放在JS代码里会引发语法错误,需替换为原生JS语法:

  • &lt; → <
  • &quot; → "

3. 通知逻辑优化

当前代码每发现一个无效邮箱就覆盖一次通知,建议先清除旧通知,再收集所有错误批量显示:

// 在checkEmails开头添加清除旧通知
formContext.getControl("new_brokeremailaddresses").clearNotification();
// 收集所有无效邮箱
const invalidEmails = [];
for (let i = 0; i < emails.length; i++) {
    var email = emails[i].trim();
    // 跳过空字符串(兼容字段末尾带分号的情况)
    if (!email) continue;
    if (!emailRegex.test(email)) {
        invalidEmails.push(email);
    }
}
// 批量展示错误
if (invalidEmails.length > 0) {
    const errorMsg = `Invalid emails: ${invalidEmails.join(', ')}`;
    console.error(errorMsg);
    formContext.getControl("new_brokeremailaddresses").setNotification(errorMsg);
}

三、修正后的完整代码示例

function valemail(executionContext) { 
    var validateEmails = {
        Context: null,
        checkEmails: (emailString) => {   
            var formContext = validateEmails.Context;
            var emails = emailString.split(';');
            // 清除旧通知
            formContext.getControl("new_brokeremailaddresses").clearNotification();
            // 邮箱验证正则表达式
            var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
            const invalidEmails = [];

            // 逐个验证邮箱地址
            for (let i = 0; i < emails.length; i++) {
                var email = emails[i].trim();
                if (!email) continue;
                if (!emailRegex.test(email)) {
                    invalidEmails.push(email);
                }
            }

            // 显示错误提示
            if (invalidEmails.length > 0) {
                const errorMsg = `Invalid email addresses: ${invalidEmails.join(', ')}`;
                console.error(errorMsg);
                formContext.getControl("new_brokeremailaddresses").setNotification(errorMsg);
            }
        },
        execute: (executionContext) => {
            var formContext = executionContext.getFormContext();
            validateEmails.Context = formContext;
            const emailAttr = formContext.getAttribute("new_brokeremailaddresses");
            if(emailAttr) {
                var emailString = emailAttr.getValue();
                if(emailString != null) {
                    validateEmails.checkEmails(emailString.toString());
                }
            }
        }
    }
    // 触发验证逻辑
    validateEmails.execute(executionContext);
}

四、额外排查方向

  • 确认Web资源new_ValEmailScript已正确发布,且在表单事件中正确关联
  • 检查字段名new_brokeremailaddresses拼写是否与实体字段完全一致
  • 测试时按F12打开浏览器控制台,查看是否存在其他JS语法报错

内容的提问来源于stack exchange,提问作者PinkPanther

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:00:58