2016-04-16 8 views
0

Ich versuche zu verhindern, dass bestimmte Benutzer-IDs von E-Mails Formular, wie eine Blacklist, zum Beispiel verweigert [email protected] und Take verweigert user1 und wenn der Benutzer das Formular sendet, dann erscheint ein Bootstrap-Alarm sagt etwas ist falsch, das Problem ist, dass, wenn Sie auf die Schaltfläche erneut klicken das Formular ohne erneute Validierung eingereicht wird, wenn ich den Teil entfernen wo Stile angewendet werden und eine Warnung verwenden, dann funktioniert es hier ist der Code bin Verwendung:Javascript: Formular reicht nach der ersten Validierung und nach dem Anwenden von Stilen

Für die Form:

<form id="contact" method="post" class="form" role="form" onsubmit="return validate()" action="m41lS3nd.php"> 

der Validierungscode:

function validate(){ 
    e.preventDefault; 
var rejectList = [ "denied1" , "denied2" ]; //List of Blacklisted emails or domains 
var emailValue = $('#email').val(); // To Get Value (can use getElementById) 
var splitArray = emailValue.split('@'); // To Get Array 

if(rejectList.indexOf(splitArray[0]) >= 0) //Check if contains any unwanted emails 
{ 
// Means it has the rejected domains 
document.getElementById("notification").style.display = "block"; //If unwanted emails are detected will show an alert 
document.getElementById("notification").style.marginTop = "5px"; 
return false; 

}else 
var contactform = document.getElementById("contact"); //If good email is entered then get the form name and submits the form 
contactform.submit(); 
return true; 
} 

Der Bootstrap-Alarm:

<!--Notification for invalid emails such as spam or unsolicited emails-->   
    <div id="notification" class="alert alert-warning alert-dismissible fade in" role="alert" style="display: none;"> 
    <button type="button" class="close" data-dismiss="alert" aria-label="Close"> 
    <span aria-hidden="true">&times;</span> 
    </button> 
    <strong>Oops!</strong>There is something wrong with your email, your reference code is: BL1SE. 
    </div> 

Der Absenden Button:

<button class="btn btn btn-md" type="submit">Send Message &nbsp;<i class="fa fa-paper-plane fa-1x" style="color: white;"></i></button> 

ich den Code nahm und von diesem Posten angepasst, kann aber nicht kommentieren oder Anbieter kontaktieren und wissen nicht, was mache ich falsch: Code for validation

+0

Ich habe versucht, dies zu tun, aber dann überspringt die Validierung und reicht das Formular direkt ein, ohne die Validierung durchzuführen. Ich habe e.preventDefault hinzugefügt; wie folgt: 'function validate() { \t e.preventDefault; var rejectList = ["verweigerte1", "verweigerte2"]; ...} ' –

+0

Bitte verlassen Sie sich niemals auf die clientseitige Validierung. (d. h. Javascript ..). http-Formular-Übermittlungen können gefälscht werden und umgehen jede js-Validierung, die Sie tun. Es ist gut für UX, aber das war's. – Alfie

+0

In dem Fall, wenn die Validierung gut ist, reicht es aus, nur "true" zurück zu geben, da dies das Senden des Formulars auslöst, andernfalls tust du es zweimal. Und ja, entfernen Sie die 'e.preventDefault()' & fügen Sie die richtige 'else' Klammer. –

Antwort

0

Es sieht aus wie Ihre Javascript-Syntax ist falsch, weil e.preventDefault(); bezieht sich auf eine nicht vorhandene Variable. Ich vermute, dass Ihre Javascript-Konsole den Fehler meldet.

Ich würde auch dringend empfehlen, {} als geeignet nach der else hinzuzufügen. Ich schätze, das wird sich nicht genau so verhalten, wie du denkst. Formatierte den Unterschied zeigen:

} else 
    var contactform = document.getElementById("contact"); 
    contactform.submit(); 
    return true; 

Vergleich:

} else { 
    var contactform = document.getElementById("contact"); 
    contactform.submit(); 
    } 
    return true; 

Wenn Sie eine andere else/if Bedingung hinzugefügt, die nicht zurückkommt, dann werden Sie contactform.submit(); treffen, ohne zu erklären und contactform initialisiert.

Verwandte Themen