匿名 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 之前尝试提交。
所以,结果是用户破坏了任何可能破坏的东西,我认为这不是非常用户直观的表单验证。
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 之前尝试提交。
所以,结果是用户破坏了任何可能破坏的东西,我认为这不是非常用户直观的表单验证。