Ошибка утверждения анонимной функции 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">

Обновление от 31.10.16

По словам Берги, ошибка «Утверждение не удалось» кажется уткой, и теперь я предполагаю, что проблема должна быть в функции выше и в том, как она работает с основным скриптом.


person markratledge    schedule 29.10.2016    source источник
comment
Пожалуйста, покажите нам трассировку стека исключения, похоже, это не связано с вашим кодом.   -  person Bergi    schedule 29.10.2016
comment
Это имеет смысл; Я переключил трассировку стача в Firebug, и ничего не отображается. Нужно ли добавлять console.trace() в скрипт выше?   -  person markratledge    schedule 29.10.2016
comment
Нет, console.trace никуда вас не приведет. Вам нужно найти место, где делается утверждение.   -  person Bergi    schedule 29.10.2016
comment
Хорошо, в основном скрипте marketo form2.js есть куча утверждений, связанных в вопросе выше. Но это может не сильно помочь, так как я не могу их изменить, но, возможно, этот сценарий можно настроить.   -  person markratledge    schedule 29.10.2016
comment
Похоже, что ни один из этих вызовов assert не проверяет вашу функцию, а скорее является своего рода совместимостью с браузером. Исключение не перехвачено или вы просто столкнулись с ним во время отладки? Что именно меняется, когда вы не выполняете свой скрипт?   -  person Bergi    schedule 29.10.2016
comment
в какой строке вы получаете ошибку? это первый? Также не могли бы вы добавить к вопросу часть html, где определено поле электронной почты?   -  person Paolo    schedule 29.10.2016
comment
Похоже, мы к чему-то пришли; Я добавил HTML-код, отображаемый сценарием на странице, ввод которого должен быть изменен сценарием выше. Ничего не меняется с приведенным выше сценарием или без него; отправка формы работает. И теперь я вижу, что ошибки Assertion failed появляются только в Safari, а не в Firefox/Firebug. И есть строки # для ошибок, но они, насколько я вижу, ничему не соответствуют.   -  person markratledge    schedule 29.10.2016


Ответы (1)


Что ж, это интересно. Скрипт работает. НО то, как это написано и как это работает с основным скриптом forms2.js Marketo, заставило меня поверить, что это не работает.

Это связано с тем, что Javascript «showErrorMessage» показывает текстовое предупреждение «Должна быть деловая электронная почта» только, когда проверка формы вызывается кнопкой «отправить» для полной формы, и только когда текст вводится в нескольких дополнительные обязательные поля под полем #Email.

Таким образом, этот скрипт не только проверяет на наличие ошибок поле #Email; это то, что я предполагал. И даже когда я добавил текст в еще одно обязательное поле ниже #Email при тестировании, он не выдает showErrorMessage.

Проверка формы работает только тогда, когда 1) все обязательные поля заполнены (после всех них есть еще одно необязательное поле, которое, конечно, не проверяется, так как оно не требуется) и 2) есть попытка отправить до проверки #Email.

Итак, это оказалось чем-то вроде комбинации пользователя, ломающего все, что можно было сломать, и, как мне кажется, не очень интуитивно понятной пользователю проверки формы.

person markratledge    schedule 08.11.2016