2016-10-29 1 views
4

Javascript для меня загадка.Утверждение не выполнено для анонимной функции Javascript

Почему у меня возникли ошибки «Утверждение не удалось анонимной функции» с функцией ниже?

Кажется довольно простым; он проверяет наличие домена в текстовом поле в контактной форме Marketo и разрешает/запрещает проверку формы.

функция должна работать со сценарием третьей стороной (внешний библиотеки Marketo) и функции на странице

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

, который показывает контактную форму (которая является причиной, по которой JSFiddle выиграл» t), поэтому это может быть трудно исправить с помощью кода, который я могу показать здесь.

Главный сценарий находится на 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"> 

Update 10/31/16

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

+1

Пожалуйста, покажите нам стек из исключения, он, кажется, не исходит из вашего кода. – Bergi

+0

Это имеет смысл; Я переключил трассировку следа в Firebug, и ничего не показывает. Мне нужно добавить console.trace() в сценарий выше? – markratledge

+0

Нет, 'console.trace' не приведет вас нигде. Вам нужно найти место, где сделано утверждение. – Bergi

ответ

0

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^