微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

匿名Javascript函数断言失败

Javascript对我来说是一个谜.

为什么我使用下面的函数得到“匿名函数断言失败”错误

看起来很简单;它检查Marketo联系表单中文本字段中是否存在域,并允许/禁止表单验证.

函数应该与第三方脚本(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的说法,“断言失败”错误似乎是一个谣言,现在我想这个问题必须与上面的函数以及它如何与主脚本一起工作.

解决方法

嗯,这很有趣.该脚本有效.但是,它的编写方式和它与主form2.js一起工作的方式.Marko脚本让我相信它不起作用.

这是因为Javascript“showErrorMessage”仅在使用完整表单的“提交”按钮激发表单验证时才显示文本警告“必须是企业电子邮件”,并且只有在#Email下面的几个必填字段中输入文本时才显示领域.

所以这个脚本不仅仅是错误检查#Email字段;这就是我的假设.即使我碰巧在测试中的#Email下面的一个必填字段中添加了文本,它也不会抛出showErrorMessage.

表格验证仅在1)填写所有必填字段时有效(在所有这些字段之后还有一个非必填字段,当然,由于不需要,因此未经验证)2)尝试提交在对#Email进行检查之前.

因此,它结果是用户破坏任何可能被破坏的东西的组合,以及我认为不是非常用户直观的表单验证.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐