2012-03-30 9 views
0

Ich habe Probleme beim Validieren eines HTML-Formulars mit JavaScript. Für sich alleine arbeiten sie, aber zusammen nicht.Wie bekomme ich zwei JavaScript-Verweise auf dasselbe HTML-Formular?

Dies funktioniert:

// Make sure the e-mail address is valid 
function validateEmail(mailform,email) { 
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; 
    var address = document.forms[mailform].elements[email].value; 
    if(reg.test(address) == false) { 
     alert('E-mail not valid'); 
     return false; 
    } 
} 

Attribut in der Form:

onsubmit="javascript:return validateEmail('mailform', 'email');" 

Und das funktioniert:

// Make sure the message is long enough 
function validateBody(mailform,mailbody) { 
    var msg = document.forms[mailform].elements[mailbody].value.length; 
    if (msg < 3) { 
     alert('Too hort'); 
     return false; 
    } 
} 

Attribut in der Form:

onsubmit="javascript:return validateBody('mailform', 'mailbody');" 

Aber das funktioniert nicht:

// Make sure the e-mail address is valid AND that the message is long enough 
function validateForm(mailform,email,mailbody) { 
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; 
    var address = document.forms[mailform].elements[email].value; 
    var msg = document.forms[mailform].elements[mailbody].value.length; 
    if(reg.test(address) == false) { 
     alert('Please enter a valid e-mail address'); 
     return false; 
    } else if (msg < 3) { 
     alert('Text too hort'); 
     return false; 
    } 
} 

Attribut in der Form:

onsubmit="javascript:return validateForm('mailform', 'email', 'mailbody');" 

Warum?

Wie ich schon sagte, sie arbeiten jede für sich, aber auch als unterschiedliche Funktionen funktionieren sie nicht zusammen.

+0

Woher kommt 'mailform' in Ihrem zweiten Beispiel? Und Sie verwenden nie den Parameter 'email' ... – RedFilter

+0

Wie funktionieren sie nicht: Sie fangen keine Fehler oder sie reichen keine korrekte Eingabe ein? Erhalten Sie Javascriptfehler? – kontur

+0

Ich bekomme keine Fehler. Es reagiert nicht auf "korrekte" Eingabe. (Ja, ich bin neu in JavaScript.) Ja, ich verwende 'email' ... 'mailform' kommt von

Kebman

Antwort

1

Wenn Sie zwei Funktionen haben, die funktionieren, warum nicht diese verwenden?

function validateForm(mailform,email,mailbody) { 
var addressValid = validateEmail(mailform,email); 
var bodyValid = validateBody(mailform,mailbody); 
return addressValid && bodyValid 
} 

Die return nur true zurück, wenn beide Tests true sind. Der Vorteil dieser Methode ist (und wird wahrscheinlich auch funktionieren), dass sie einfach erweitert und leicht gewartet werden kann.

Wenn Sie nur eine Warnung möchten, wenn zwei Fehler auftreten, müssen Sie nur addressValid testen und bodyValid nur bei Bedarf anrufen.

+0

Vielen Dank! : D Das funktioniert! – Kebman

1

Verwenden Sie if (msg < 3) anstelle von else if (msg < 3).

+0

Bereits versucht es. Funktioniert nicht. – Kebman

+0

@Kebman Haben Sie versucht, 'return true;' Zeile vor dem Ende des 'validateForm' Funktionskörpers hinzuzufügen? – Engineer

+0

Ja. Funktioniert immer noch nicht ... – Kebman

1

Sie müssen javascript: im Attribut onsubmit nicht verwenden, entfernen Sie diesen Teil.

Sie würden auch sehr von der Verwendung einer JavaScript-Bibliothek wie jQuery profitieren.

+0

Danke! Entfernt. Ansonsten möchte ich das auf die harte Tour lernen, bevor ich es auf die leichte Art mache. :) – Kebman

Verwandte Themen