2012-03-30 16 views
0

JavaScriptでHTMLフォームの検証に問題があります。彼ら自身ではそれぞれ働くが、一緒には働かない。フォームで同じHTMLフォームに2つのJavaScriptリファレンスを使用するにはどうすればよいですか?

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

属性::

これは動作します

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

をそして、これは動作します:フォームで

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

属性:

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

しかし、これは動作しません:フォームで

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

属性:

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

はなぜ?

私が言ったように、彼らはそれぞれ独自の機能を持っていますが、機能が異なる場合でも一緒に機能しません。

+0

2番目の例では 'mailform'はどこから来ますか?そして、あなたは決して 'email'パラメータを使用しません... – RedFilter

+0

どのように動作しません:彼らはエラーをキャッチしないか、または正しい入力を提出しませんか?何かJavaScriptエラーが出ますか? – kontur

+0

エラーはありません。それは "正しい"入力に反応しません。 (ええと、私はJavaScriptの新機能です) はい、私は '電子メール'を使用しています... 'form form = "mailform" name = "contactform" method = "post" action = " send_form_email.php "onsubmit =" javascript:return validate( 'mailform'、 'email'); "> – Kebman

答えて

1

2つの機能がある場合は、その機能を使用しないでください。両方のテストがtrueある場合

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

returntrueを返します。この方法の利点は、容易に拡張され、容易に維持されることである(同様にうまくいく可能性もある)。

2つのエラーがある場合に1つのアラートだけが必要な場合は、addressValidをテストし、必要に応じてbodyValidを呼び出す必要があります。

+0

ありがとうございました! :Dこれは動作します! – Kebman

1

else if (msg < 3)の代わりにif (msg < 3)を使用してください。

+0

すでに試しました。動作しません。 – Kebman

+0

@Kebman 'validateForm'関数の本体の最後の前に' return true; '行を追加しようとしましたか? – Engineer

+0

はい。まだ動作しません... – Kebman

1

onsubmit属性にjavascript:を使用する必要はありません。その部分を削除してください。

また、jQueryなどのJavaScriptライブラリを使用すると大きなメリットがあります。

+0

ありがとう!削除されました。そうでなければ、私は簡単な方法をする前に、これを難しい方法で学びたいと思っています。 :) – Kebman

関連する問題