2016-10-29 16 views
4

Javascript ist ein Rätsel für mich.Assertion auf anonyme Javascript-Funktion fehlgeschlagen

Warum bekomme ich "Assertion fehlgeschlagen auf anonyme Funktion" Fehler mit der folgenden Funktion?

Es scheint ziemlich einfach; Es überprüft das Vorhandensein einer Domäne in einem Textfeld in einem Marketo-Kontaktformular und erlaubt/erlaubt die Formularvalidierung.

Die Funktion sollte mit einem 3rd-Party-Skript (a Marketo externe Bibliothek) und der On-Page-Funktion

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

, die ein Kontakt-Formular zeigt arbeiten (was der Grund ‚ein JSFiddle ist gewonnen t Arbeit), also kann das schwierig sein, mit dem Code zu beheben, den ich hier zeigen kann.

Das Hauptskript ist um http://app-sjn.marketo.com/js/forms2/js/forms2.js Ich kann natürlich dort nichts ändern. Aber ist in der folgenden Funktion etwas offensichtlich? Oder wie interagiert es mit dem Hauptskript? Ist (function() das Problem?

(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; 
    } 

})(); 

Und dies ist der HTML-Code, die Skript Ziele auf Dokument bereit:

<input style="width: 150px;" 
class="mktoField mktoEmailField mktoHasWidth mktoRequired mktoValid" maxlength="255" 
name="Email" id="Email" type="email"> 

aktualisieren 10/31/16

Die "Assertion ist fehlgeschlagen" Fehler ein canard zu sein scheint , nach Bergi, und jetzt denke ich, das Problem muss mit der obigen Funktion und wie es mit dem Hauptskript funktioniert.

+1

Bitte zeigen Sie uns das Stacktrace der Ausnahme, es scheint nicht aus Ihrem Code zu kommen. – Bergi

+0

Das macht Sinn; Ich habe Stach Trace in Firebug umgeschaltet und nichts zeigt. Muss ich dem obigen Skript console.trace() hinzufügen? – markratledge

+0

Nein, 'console.trace' führt Sie nirgendwohin. Sie müssen den Ort finden, an dem die Behauptung gemacht wird. – Bergi

Antwort

0

Nun, das ist interessant. Das Skript funktioniert. ABER, die Art, wie es geschrieben ist und die Art und Weise, wie es mit dem Marko-Skript forms2.js funktioniert, hat mich dazu gebracht zu glauben, dass es nicht funktioniert hat.

Das ist, weil das Javascript „showErrorMessage“ zeigt den Text Warnung „Must Business-E-Mail“ nur, wenn die Formularvalidierung mit der Schaltfläche „Senden“ für die vollständige Form hervorgerufen, und nur, wenn der Text in mehreren mehr eingegeben Pflichtfelder unterhalb des # E-Mail-Feldes.

Also dieses Skript überprüft nicht nur das # E-Mail-Feld; das habe ich angenommen. Und selbst wenn ich zufällig Text in einem weiteren Pflichtfeld unterhalb von #Email hinzufüge, wirft es nicht die showErrorMessage. Die Formularüberprüfung funktioniert nur, wenn 1) alle erforderlichen Felder ausgefüllt sind (nach all diesen gibt es ein nicht benötigtes Feld, das natürlich nicht validiert wird, da es nicht benötigt wird) und 2) ein Versuch, sich zu übergeben, bevor es #Email-Prüfungen gibt.

So stellte sich heraus, dass es etwas von einer Kombination aus einem Benutzer bricht alles, was könnte gebrochen werden, und was ich denke, ist nicht sehr Benutzer intuitiv Formvalidierung.

Verwandte Themen