2

是否可以通过查询拦截 marketo 登陆页面表单提交,我正在尝试运行自定义表单验证,以防止表单被提交。有任何想法吗?

4

2 回答 2

2

这个有可能。Marketo Forms提供了一个名为 onValidate 的方法。此方法允许您添加在表单提交期间触发的自定义验证。这是一个如何使用 onValidate 方法来防止提交非公司电子邮件地址的示例。

<script>
(function (){
  // Please include the email domains you would like to block in this list
  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.submitable(false);
          var emailElem = form.getFormElem().find("#Email");
          form.showErrorMessage("Must be Business email.", emailElem);
        }else{
          form.submitable(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;
  }

})();
</script>
于 2014-11-10T21:20:54.830 回答
0

Sandford Whiteman 在 Marketo 论坛上回答了这个问题;

var instanceURL = '//app-sj01.marketo.com',
  munchkinId = '410-XOR-673',
  formId = 734;
MktoForms2.loadForm(instanceURL, munchkinId, formId);

MktoForms2.whenReady(function(form) {
  var companyURLRules = {
        formFieldName : 'Website',
    allowedHostnames : ['info.example.com', 'marketo.com'],
        errorMessage : 'You must use an approved Domain.'
    };

  /* ---- NO NEED TO EDIT BELOW THIS LINE! ---- */

  var formJq = form.getFormElem(),
    urlJq = formJq.find('[name="' + companyURLRules.formFieldName + '"]');

  form.onValidate(function(native) {
    if (!native) return;

        var currentVals = form.getValues();

    form.submittable(false);
    if (!hostnameInList(currentVals[companyURLRules.formFieldName], companyURLRules.allowedHostnames)) {
      form.showErrorMessage(companyURLRules.errorMessage, urlJq);
    } else {
      form.submittable(true);
    }
  });


  function hostnameInList(url, list) {
    var loc = document.createElement('a');

    loc.href = /^https?:\/\//.test(url) ? url : 'https://' + url;
    return !!list.filter(function(itm) {
      return loc.hostname == itm;
    }).length;
  }

});
于 2017-05-10T16:14:43.950 回答