JS表单提交问题:未填必填字段仍触发邮件附件如何阻止?
如何阻止表单验证不通过时执行邮件附加操作?
核心解决方案
你的问题出在验证失败时没有彻底终止后续的提交流程,尤其是在Acrobat PDF的JavaScript环境中,单纯的return可能不足以阻止后续动作。以下是两种针对性的解决方法:
情况1:邮件附加代码和验证代码在同一个函数里
把邮件相关的代码放到验证通过的分支里,只有当所有必填字段都填完时才执行:
var emptyFields = []; for (var i = 0; i < this.numFields; i++) { var f = this.getField(this.getNthFieldName(i)); if (f.type != "button" && f.required) { if ( (f.type == "text" && f.value == "") || (f.type == "checkbox" && f.value == "Off") ) emptyFields.push(f.name); } } if (emptyFields.length > 0) { // 修复alert换行问题,用\n转义符 app.alert( "错误!请填写以下必填字段:\n" + emptyFields.join("\n") ); // 返回false彻底终止当前函数,阻止后续代码执行 return false; } else { // 把你的邮件附加/发送代码放到这里,例如: // this.mailForm({ // to: "xxx@example.com", // subject: "表单提交", // body: "请查看附件的表单", // cOpt: "Attachment" // }); }
情况2:按钮设置了多个动作(先验证JS,再执行内置邮件动作)
如果你的按钮动作是分两步设置的:第一步运行验证JS,第二步执行“发送邮件”的内置动作,需要做两个修改:
- 在验证代码的
if(emptyFields.length>0)块里,把return改成return false - 编辑按钮的动作属性:在“运行JavaScript”的动作设置里,勾选**“如果脚本返回true则继续执行”**
这样当验证失败返回false时,后续的邮件动作会被直接跳过。
为什么之前的return/break没用?
在Acrobat的JavaScript环境中:
- 单纯的
return(不带返回值)会被默认视为return true,不会阻止后续动作 break只能终止当前的循环,无法退出整个函数或阻止后续动作- 只有明确返回
false,才能告诉Acrobat终止当前的动作流程
内容的提问来源于stack exchange,提问作者OrangeBall0315
相关产品推荐
相关产品推荐

