2017-06-06 1 views
0

Ich bin neu in JavaScript und bin ein bisschen stecken ...Display eine Fehlermeldung Feld neben dem Eingang, wenn Eingabefeld leer ist

Ich habe ein Formular und ich versuche, Fehlermeldungen neben Eingabefelder zu erzeugen, sind leer oder enthalten nicht die korrekten Informationen.

Leider tut das nichts ... Danke für Ihre Hilfe !!

Mein HTML:

<form name="user_details" method="post" onsubmit="return checkform()"> 
    <table id="form_table"> 
     <tr> 
      <td class="form_cell"><label for="first_name">First Name:</label></td> 
      <td class="form_cell"><input type="text" id="first_name">*</td> 
      <td id="error_first_name">The first name field needs to contain at least one character.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="surname">Surname:</label></td> 
      <td class="form_cell"><input type="text" id="surname">*</td> 
      <td id="error_surname">The surname field needs to contain at least one character.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="address">Address:</label></td> 
      <td class="form_cell"><input type="text" id="address">*</td> 
      <td id="error_address">The address field needs to contain at least one character.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="city">City:</label></td> 
      <td class="form_cell"><input type="text" id="city">*</td> 
      <td id="error_city">The city field needs to contain at least one character.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="post_code">Post Code:</label></td> 
      <td class="form_cell"><input type="text" id="post_code">*</td> 
      <td id="error_post_code">The post code field needs to contain a number.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="email">Email:</label></td> 
      <td class="form_cell"><input type="email" id="email">*</td> 
      <td id="error_email">The email field needs to contain an email address.</td> 
     </tr> 
     <tr> 
      <td class="form_cell"><label for="phone_number">Phone Number:</label></td> 
      <td class="form_cell"><input type="text" id="phone_number"></td> 
     </tr> 
    </table> 
     <input type="submit"><input type=reset> 
    </form> 

Mein JavaScript:

function checkform() { 
var ok = true, 
    first_name, 
    surname, 
    address, 
    city, 
    post_code, 
    email; 

if (document.getElementById("first_name").value == "") { 
    document.getElementById("first_name").style.borderColor = "red"; 
    $("#error_first_name").show(); 
    ok = false; 
} 

else if (document.getElementById("surname").value == "") { 
    document.getElementById("surname").style.borderColor = "red"; 
    $("#error_surname").show(); 
    ok = false; 
} 

else if (document.getElementById("address").value == "") { 
    document.getElementById("address").style.borderColor = "red"; 
    $("#error_address").show(); 
    ok = false; 
} 

else if (document.getElementById("city").value == "") { 
    document.getElementById("city").style.borderColor = "red"; 
    $("#error_city").show(); 
    ok = false; 
} 

else if (document.getElementById("post_code").value == "") { 
    document.getElementById("post_code").style.borderColor = "red"; 
    $("#error_post_code").show(); 
    ok = false; 
} 

else if (document.getElementById("email").value == "") { 
    document.getElementById("email").style.borderColor = "red"; 
    $("#error_email").show(); 
    ok = false; 
} 

else if (!/^[A-Za-z]+$/.test(document.getElementById("first_name").value)) { 
    document.getElementById("first_name").style.borderColor = "red"; 
    ok = false; 
} 

else if (!/^[A-Za-z]+$/.test(document.getElementById("surname").value)) { 
    document.getElementById("surname").style.borderColor = "red"; 
    ok = false; 
} 

else if (!/^[A-Za-z]+$/.test(document.getElementById("address").value)) { 
    document.getElementById("address").style.borderColor = "red"; 
    ok = false; 
} 

else if (!/^[A-Za-z][0-9]+$/.test(document.getElementById("city").value)) { 
    document.getElementById("city").style.borderColor = "red"; 
    ok = false; 
} 

else if (!/^[0-9]+$/.test(document.getElementById("post_code").value)) { 
    document.getElementById("post_code").style.borderColor = "red"; 
    ok = false; 
} 

else if (!/\[email protected]\S+/.test(document.getElementById("email").value)) { 
    document.getElementById("first_name").style.borderColor = "red"; 
    ok = false; 
} 


else { 
    return ok; 
} 

}

Meine CSS:

#error_first_name { 
display: none; 
} 

#error_surname { 
display: none; 
} 

#error_address { 
display: none; 
} 

#error_city { 
display: none; 
} 

#error_post_code { 
display: none; 
} 

#error_email { 
display: none; 
} 
+0

keine Rückkehr in sonst Bedingung! Es wird alle Ihre Bedingung als ein Ergebnis zurückgeben, also außerhalb, wenn sonst Bedingung 'return ok;' entfernen 'else {}' –

Antwort

0

Sie haben mehrere Probleme in Ihrem Code und Sie kann es in vielen Faktoren verbessern, siehe unten.

  1. Sie schließen die Funktion checkform() nicht ordnungsgemäß, Sie fehlen eine schließende Klammer.
  2. Sie wollen return ok aus der Funktion, egal was, so sollten Sie den else Block, zum Beispiel weglassen:

    function checkform() { 
        var ok = true, 
        [ omitted for brevity ] 
        else if (!/\[email protected]\S+/.test(document.getElementById("email").value)) { 
         document.getElementById("first_name").style.borderColor = "red"; 
         ok = false; 
        } 
    
        return ok; 
    } 
    
  3. Sie wollen wahrscheinlich alle Fehler in Form überprüfen einreichen. Momentan sucht Ihr Code nach Fehlern in jedem Feld und wenn er einen Fehler entdeckt, zeigt er die Fehlermeldung an und hört auf nach anderen Fehlern zu suchen.Um es zu ändern, sollten Sie else if für nur Serie von if aufgeben, etwa so:

    function checkform() { 
        var ok = true, 
        [ omitted for brevity ] 
    
        if (document.getElementById("first_name").value == "") { 
         document.getElementById("first_name").style.borderColor = "red"; 
         $("#error_first_name").show(); 
         ok = false; 
        } // See here - it will check each field no matter what 
        if (document.getElementById("surname").value == "") { 
         document.getElementById("surname").style.borderColor = "red"; 
         $("#error_surname").show(); 
         ok = false; 
        } 
        return ok; 
    } 
    
  4. Sie sind nicht Feld Stil Zurücksetzen, wenn der Fehler verschwunden ist. Beispiel: Der Benutzer versucht, ein leeres Formular zu senden, daher signalisieren alle Felder einen Fehler. Dann füllt der Benutzer nur den Vornamen und reicht ihn ein, aber der Fehler wird immer noch angezeigt, weil Sie ihn nie zurücksetzen. Sie könnten zu jeder Prüfung eine else hinzufügen und entsprechend handeln.

  5. Sie sollten === für String-Vergleich (siehe this answer)
  6. Ich sehe Sie jQuery verwenden, sollten Sie nicht „blank“ js mischen (wie document.getElementById mit jQuery-Code, weil es der Code unordentlich macht. Mit jQuery Sie kann einen Wert eines Feldes wie folgt erhalten: $('<css selector here>').val(), zum Beispiel $('#first_name').val(), und Sie können Stile ändern, indem Sie $('<css selector>').css('<property', '<value>')
  7. Sie sollten Präsentation und Code nicht mischen (wie Einstellungsstile) stattdessen hinzufügen und entfernen Sie eine CSS-Klasse und style es in Ihrem Stylesheet: Sie können eine Klasse mit jQuery wie folgt hinzufügen: $('<css selector').addClass('<you class name') und analog $('<css selector').removeClass('<you class name')
  8. entfernen
  9. Sie sollten Ihre Event-Handler (wie onsubmit) in Ihrer Skriptdatei anhängen, damit Sie Ihren HTML-Code nicht mit Event-Handlern und JS mit vielen Funktionen, die nur aus HTML aufgerufen werden, überladen. Dies verbessert die Lesbarkeit Ihres Codes.

    $(function() { // This wait's for document.ready. 
        // It's required to attach event in script 
        // because scripts are ran before browser parses HTML 
        $('#formId').submit(function() { 
         return false; // This gets called on form submit 
        }); 
    }); 
    

Ich habe erstellt eine plunker that demonstrates all of my points

Weitere Informationen Sie jQuery website und andere Fragen zu Stackoverflow sehen sollte: Sie können Ihre Event-Handler in jQuery wie so befestigen.

+0

Vielen Dank Enbyted !!! Am Ende von gestern ergab nichts mehr Sinn, aber dank deiner ausführlichen Erklärung weiß ich jetzt, was ich mache :) – Marie

1

Wenden Sie das return ok in Ende der Funktion auch

function checkform() { 
 
    var ok = true, 
 
    first_name, 
 
    surname, 
 
    address, 
 
    city, 
 
    post_code, 
 
    email; 
 

 
    if (document.getElementById("first_name").value == "") { 
 
    document.getElementById("first_name").style.borderColor = "red"; 
 
    $("#error_first_name").show(); 
 
    ok = false; 
 
    } else if (document.getElementById("surname").value == "") { 
 
    document.getElementById("surname").style.borderColor = "red"; 
 
    $("#error_surname").show(); 
 
    ok = false; 
 
    } else if (document.getElementById("address").value == "") { 
 
    document.getElementById("address").style.borderColor = "red"; 
 
    $("#error_address").show(); 
 
    ok = false; 
 
    } else if (document.getElementById("city").value == "") { 
 
    document.getElementById("city").style.borderColor = "red"; 
 
    $("#error_city").show(); 
 
    ok = false; 
 
    } else if (document.getElementById("post_code").value == "") { 
 
    document.getElementById("post_code").style.borderColor = "red"; 
 
    $("#error_post_code").show(); 
 
    ok = false; 
 
    } else if (document.getElementById("email").value == "") { 
 
    document.getElementById("email").style.borderColor = "red"; 
 
    $("#error_email").show(); 
 
    ok = false; 
 
    } else if (!/^[A-Za-z]+$/.test(document.getElementById("first_name").value)) { 
 
    document.getElementById("first_name").style.borderColor = "red"; 
 
    ok = false; 
 
    } else if (!/^[A-Za-z]+$/.test(document.getElementById("surname").value)) { 
 
    document.getElementById("surname").style.borderColor = "red"; 
 
    ok = false; 
 
    } else if (!/^[A-Za-z]+$/.test(document.getElementById("address").value)) { 
 
    document.getElementById("address").style.borderColor = "red"; 
 
    ok = false; 
 
    } else if (!/^[A-Za-z][0-9]+$/.test(document.getElementById("city").value)) { 
 
    document.getElementById("city").style.borderColor = "red"; 
 
    ok = false; 
 
    } else if (!/^[0-9]+$/.test(document.getElementById("post_code").value)) { 
 
    document.getElementById("post_code").style.borderColor = "red"; 
 
    ok = false; 
 
    } else if (!/\[email protected]\S+/.test(document.getElementById("email").value)) { 
 
    document.getElementById("first_name").style.borderColor = "red"; 
 
    ok = false; 
 
    } else { 
 
    return ok; 
 
    } 
 
    return ok; 
 
}
#error_first_name { 
 
    display: none; 
 
} 
 

 
#error_surname { 
 
    display: none; 
 
} 
 

 
#error_address { 
 
    display: none; 
 
} 
 

 
#error_city { 
 
    display: none; 
 
} 
 

 
#error_post_code { 
 
    display: none; 
 
} 
 

 
#error_email { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name="user_details" method="post" onsubmit="return checkform()"> 
 
    <table id="form_table"> 
 
    <tr> 
 
     <td class="form_cell"><label for="first_name">First Name:</label></td> 
 
     <td class="form_cell"><input type="text" id="first_name">*</td> 
 
     <td id="error_first_name">The first name field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="surname">Surname:</label></td> 
 
     <td class="form_cell"><input type="text" id="surname">*</td> 
 
     <td id="error_surname">The surname field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="address">Address:</label></td> 
 
     <td class="form_cell"><input type="text" id="address">*</td> 
 
     <td id="error_address">The address field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="city">City:</label></td> 
 
     <td class="form_cell"><input type="text" id="city">*</td> 
 
     <td id="error_city">The city field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="post_code">Post Code:</label></td> 
 
     <td class="form_cell"><input type="text" id="post_code">*</td> 
 
     <td id="error_post_code">The post code field needs to contain a number.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="email">Email:</label></td> 
 
     <td class="form_cell"><input type="email" id="email">*</td> 
 
     <td id="error_email">The email field needs to contain an email address.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="phone_number">Phone Number:</label></td> 
 
     <td class="form_cell"><input type="text" id="phone_number"></td> 
 
    </tr> 
 
    </table> 
 
    <input type="submit"><input type=reset> 
 
</form>

1

ich einige Punkte hervorheben möchte, basierend auf Ihren Code

  1. Die Fehler ist, weil Sie nicht haben Fügen Sie eine jquery-Version in Ihren Code ein.
  2. Wenn Sie jQuery verwenden, dann verwenden Sie den Code kurz.
  3. Wiederholen Sie nicht die gleiche Eigenschaft für jede id in CSS verwenden Sie stattdessen eine class.
  4. überprüfen leer und regex in Einzel Zustand mit ||

function checkform() { 
 
    var ok = true, 
 
    first_name = $.trim($("#first_name").val()), 
 
    surname = $.trim($("#surname").val()), 
 
    address = $.trim($("#first_name").val()), 
 
    city = $.trim($("#city").val()), 
 
    post_code = $.trim($("#post_code").val()), 
 
    email = $.trim($("#email").val()); 
 
    $('input.bdred').removeClass('bdred'); 
 
    $('.errors').hide(); 
 
    if (!first_name || !/^[A-Za-z]+$/.test(first_name)) { 
 
    $("#first_name").addClass('bdred'); 
 
    $("#error_first_name").show(); 
 
    ok = false; 
 
    } else if (!surname || !/^[A-Za-z]+$/.test(surname)) { 
 
    $("#surname").addClass('bdred'); 
 
    $("#error_surname").show(); 
 
    ok = false; 
 
    } else if (!address || !/^[A-Za-z]+$/.test(address)) { 
 
    $("#address").addClass('bdred'); 
 
    $("#error_address").show(); 
 
    ok = false; 
 
    } else if (!city || !/^[A-Za-z][0-9]+$/.test(city)) { 
 
    $("#city").addClass('bdred'); 
 
    $("#error_city").show(); 
 
    ok = false; 
 
    } else if (!post_code || !/^[0-9]+$/.test(post_code)) { 
 
    $("#post_code").addClass('bdred'); 
 
    $("#error_post_code").show(); 
 
    ok = false; 
 
    } else if (!email || !/\[email protected]\S+/.test(email)) { 
 
    $("#email").addClass('bdred'); 
 
    $("#error_email").show(); 
 
    ok = false; 
 
    } 
 
    return ok; 
 
}
.errors { 
 
    display: none; 
 
} 
 

 
.bdred { 
 
    border-color: red 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name="user_details" method="post" onsubmit="return checkform();"> 
 
    <table id="form_table"> 
 
    <tr> 
 
     <td class="form_cell"><label for="first_name">First Name:</label></td> 
 
     <td class="form_cell"><input type="text" id="first_name">*</td> 
 
     <td id="error_first_name" class="errors">The first name field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="surname">Surname:</label></td> 
 
     <td class="form_cell"><input type="text" id="surname">*</td> 
 
     <td id="error_surname" class="errors">The surname field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="address">Address:</label></td> 
 
     <td class="form_cell"><input type="text" id="address">*</td> 
 
     <td id="error_address" class="errors">The address field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="city">City:</label></td> 
 
     <td class="form_cell"><input type="text" id="city">*</td> 
 
     <td id="error_city" class="errors">The city field needs to contain at least one character.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="post_code">Post Code:</label></td> 
 
     <td class="form_cell"><input type="text" id="post_code">*</td> 
 
     <td id="error_post_code" class="errors">The post code field needs to contain a number.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="email">Email:</label></td> 
 
     <td class="form_cell"><input type="email" id="email">*</td> 
 
     <td id="error_email" class="errors">The email field needs to contain an email address.</td> 
 
    </tr> 
 
    <tr> 
 
     <td class="form_cell"><label for="phone_number">Phone Number:</label></td> 
 
     <td class="form_cell"><input type="text" id="phone_number"></td> 
 
    </tr> 
 
    </table> 
 
    <input type="submit"><input type=reset> 
 
</form>

0

Wenn Sie Jquery verwendet, können Sie Ihren Code verkürzen mit für gleiche Mustergruppe machen Array und mit .each

function checkform() { 
    var ok = true; 
    var character = [["first_name","surname","address"],["/^[A-Za-z]+$/"]]; 
    var city = [["city"],["/^[A-Za-z][0-9]+$/"]]; 
    var post = [["post_code"],["/^[0-9]+$/"]]; 
    var email = [["email"],["/\[email protected]\S+/"]]; 
    $("form[name='user_details'] input").each(function(){ 
     if($.inArray(this.id,character[0]) >= 0) { 
      ok = showError(this,character[1]);  
     } else if(this.id == city[0]) { 
      ok = showError(this,city[1]); 
     } else if(this.id == post[0]) { 
      ok = showError(this,post[1]); 
     } else if(this.id == email[0]) { 
      ok = showError(this,email[1]); 
     } 
    }); 
    return ok; 
} 
function showError(t,p) { 
    if(t.value == "" || !p.test(t.value)){ 
     $(t).css("borderColor","red"); 
     $("#error_"+t.id).show(); 
     return false; 
    } 
    return true; 
} 
Verwandte Themen