JavaScript - 如何检测空字段并阻止 PDF 提交,同时还将“0”条目视为有效?

JavaScript - How to detect empty field and prevent PDF submission while also seeing entry of "0" as valid?

通过阅读此论坛上的其他评论,我在 Acrobat X 中将 JavaScript 和一个提交按钮放在一起,它将向特定的人发送电子邮件,并在主题行和电子邮件的正文。这部分按钮效果很好,不需要更改。

这是我遇到的问题:如果用户没有完成所有必填字段(我已将其中大约 10 个标记为必填),我希望出现错误 window,我希望这个错误可以防止上述电子邮件 window 弹出。这实际上在下面的代码中有效(使用 IF/Else 语句),但问题是如果用户输入“0”作为值,我 想要错误.我希望“0”被视为一个真实的非空字段。就像现在一样,如果用户在任何必填字段中输入“0”,就会出现 "Oops!" 错误,即使在这种情况下“0”可能是一个完全有效的答案。

我认为问题出在我的 "if (emptyFields.length>0)" 语句或其中的某些内容上,但我不知道如何更正它。

我确信这是一个非常明显的解决方案,但作为一个 JavaScript 新手,我无法理解。在过去的几个小时里,我一直在查看各种评论,但我对 JavaScript 语言仍然不够熟悉,无法在这些评论中应用这些信息...感谢任何帮助。

 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) {

 app.alert("Oops! Please fill in the following field(s) before emailing:\n\n" + emptyFields.join("\n"));

 } else {

 var cToAddr = "emailaddress@company.com"

 var cSubLine = "TD Submitted - " + this.getField("Store").value + ", SKU " + this.getField("SKU").value;

 var cBody = "Hello,\n\n" + "Completed TDR attached."
 + "Thanks!\n\n"
 + this.getField("Name").value

 this.mailDoc({
 bUI: true,
 cTo: cToAddr,
 cSubject: cSubLine,
 cMsg: cBody});
 }

谢谢。

与“”比较时,javascript可能会将空字符串转换为数字进行比较。因此,当您检查 0 == "" 时,javascript 将 "" 转换为 0 并发现它们相等。您可以使用 === 来避免这种转换。

0 == ""; // true
0 === ""; // false

因此您的陈述可能会被替换为:

(f.type=="text" && f.value=="" && f.value !== 0)

这个答案更详细: