匿名 Javascript 函数断言失败

Assertion failed on anonymous Javascript function

Javascript对我来说是个谜

为什么下面的函数会出现 "Assertion failed on anonymous function" 错误?

看起来很简单;它会检查 Marketo 联系表单中的文本字段中是否存在域以及 allows/disallows 表单验证。

该函数应该与第 3 方脚本(Marketo 外部库)和页面函数一起使用

MktoForms2.loadForm("http://app-sjn.marketo.com", "023-GTK-123", 4567);

它显示了一个联系表单(这是 JSFiddle 无法工作的原因),所以这可能很难用我可以在此处显示的代码修复。

主要脚本在http://app-sjn.marketo.com/js/forms2/js/forms2.js,我显然不能在那里改变任何东西。但是下面的函数有什么明显的地方吗?或者它如何与主脚本交互? (function () 是问题所在吗?

(function (){
  var invalidDomains = ["@gmail.","@yahoo.","@hotmail.","@live.","@aol.","@outlook."];

  MktoForms2.whenReady(function (form){
    form.onValidate(function(){
      var email = form.vals().Email;
      if(email){
        if(!isEmailGood(email)) {
          form.submittable(false);
          var emailElem = form.getFormElem().find("#Email");
          form.showErrorMessage("Must be Business email.", emailElem);
        }else{
          form.submittable(true);
        }
      }
    });
  });

  function isEmailGood(email) {
    for(var i=0; i < invalidDomains.length; i++) {
      var domain = invalidDomains[i];
      if (email.indexOf(domain) != -1) {
        return false;
      }
    }
    return true;
  }

})();

这是脚本针对文档就绪的HTML:

<input style="width: 150px;"
class="mktoField mktoEmailField mktoHasWidth mktoRequired mktoValid" maxlength="255"
name="Email" id="Email" type="email">

2016 年 10 月 31 日更新

根据 Bergi 的说法,"Assertion failed" 错误似乎是谣言,现在我猜问题一定出在上面的函数以及它如何与主脚本一起工作。

嗯,这很有趣。该脚本有效。但是,它的编写方式以及它与主要 forms2.js Marketo 脚本一起工作的方式让我相信它不起作用。

那是因为 Javascript "showErrorMessage" 显示文本警告 "Must be Business email" 只有 当使用 "submit" 按钮用于完成表单,并且仅当在#Email 字段下方的多个必填字段中输入文本时。

所以这个脚本不仅仅对#Email 字段进行错误检查;这就是我的假设。甚至当我在测试中碰巧在#Email 下面的另一个必填字段中添加文本时,它也不会抛出 showErrorMessage.

表单验证仅在以下情况下有效:1) 填写了所有必填字段(在所有这些之后还有一个非必填字段,当然没有验证,因为它不是必需的)和 2) 有是在检查#Email 之前尝试提交。

所以,结果是用户破坏了任何可能破坏的东西,我认为这不是非常用户直观的表单验证。