2016-03-25 8 views
-1

Ich habe Funktion prüfen dynamische Eingabefelder mit einer bestimmten Klasse. In diesen Feldern wird die E-Mail-Adresse verwendet, um zu prüfen, ob es sich um eine gültige E-Mail-Adresse handelt.Javascript-Funktion gibt undefined zurück, wie es nicht sein sollte

Es könnte viele E-Mail-Feld geben, wenn einer von ihnen gegen E-Mail-Adresse Test fehlschlägt, sollte es FALSE zurückgeben, sonst sollte TRUE zurückgeben. Endlich beim Senden geklickt save_form() läuft. Wenn es false wird, sollte es aufhören, sonst geht es weiter. Aber es wird immer "undefiniert".

Hier ist, was ich habe:

function validate_email_string(email_address) { 
    var emailReg=/^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
    var emailTest = emailReg.test(email_address); 
    var result = (emailTest === false) ? false : true; 
    return result; 
} 

function validate_email_extensions(email_field_selector, message) { 
    var invalid_message = null; 
    if (typeof message !== "undefined") { 
    invalid_message = message; 
    } else { 
    invalid_message = '<?=lang("i18n_invalid_email_address");?>'; 
    } 
    var email_fields_length = $(email_field_selector).length; 
    var is_valid = true; 
    if (email_fields_length) { 
    $(email_field_selector).each(function(index, el) { 
     if($(el).val()) { 
     if(!validate_email_string($(el).val())) { 
      is_valid = false; 
     } 
     if (index === email_fields_length - 1) { 
      if (is_valid === false) { 
      Interact.show(invalid_message); 
      } 
      return is_valid; 
     } 
     } else { 
     if (index === email_fields_length - 1) { 
      if (is_valid === false) { 
      Interact.show(invalid_message); 
      } 
      return is_valid; 
     } 
     } 
    }); 
    } else { 
    return is_valid; 
    } 
} 

function save_form() { 
    var emails = validate_email_extensions('.jq-extension-email'); 
    if(!emails){return false} 
    .... 

Aber validate_email_extensions Funktion undefined zurück. Ich stelle console.log() überall, wahrscheinlich ist es blind von mir, aber jede Hilfe wird sehr geschätzt.

+0

@Hanky ​​Panky Zuerst 'if' soll nichts zurückgeben :) Es ist nur für das Setzen einer Standardnachricht. Danke für den Beitrag trotzdem. – YahyaE

+1

Ja, ich habe nicht richtig erwähnt, was zuerst dann erkannte ich, dass mehrdeutig sein kann, so entfernte ich den Kommentar und legte es in eine Antwort mit unterschiedlichem Inhalt –

Antwort

3

Ihre Rückgaben sind von Ihrer Schleife zu validate_email_extensions, nicht von validate_email_extensions zu save_form, wie Sie erwarten.

validate_email_extensions muss immer noch den Wert save_form zurückgeben.

Das einzige Mal, wo Ihre Funktion richtig einen Wert zurückgibt, wenn dieser Fall FALSE

if (email_fields_length) { 

Es ist kein Wert zurückgibt, wenn die Steuerung in diesem if Zustand geht.

+0

'is_valid' definiert vor dieser Aussage. Die Idee ist also, 'is_valid' als 'true' zu ​​setzen. Setzen Sie es während jeder Schleife auf "false", wenn die Validierung fehlschlägt. Überprüfen Sie nach der letzten Schleife, ob 'ìs_valid'' false' ist. Wenn dies der Fall ist, bedeutet dies, dass bei mindestens einem Feld die Validierung fehlgeschlagen ist. Also ich denke, es muss in Ordnung sein, wenn Sie den Rest des Codes bemerken. Obwohl, wenn ich ein Experte wäre, würde ich nicht hier fragen, also könnte ich mich irren. – YahyaE

+0

Etwas zu definieren bedeutet nichts. Sie geben es nicht an den Aufrufer zurück, und deshalb ist es für den Aufrufer nicht definiert. Sie können eine ganze Enzyklopädie in einer Funktion definieren, aber wenn Sie sie nicht ordnungsgemäß an den Aufrufer zurücksenden (oder global machen), ist dies für den Aufrufer nicht möglich. –

+0

Ja, weil ich es zurückgebe, wenn es die letzte Schleife von jedem ist, die nur die untere Zeile ist. – YahyaE

Verwandte Themen