2016-10-25 6 views
0

私はこの連絡先フォームを使用しています。フォームの検証がchromeやfirefoxで機能していません

<form name="contact" action="mailto:[email protected]&subject=subject&body=message" 
onsubmit="return validate()" method="post" enctype="text/plain"> 
<label for="mail">Your mail address *</label> 
<input type="text" name="mail"/></br></br> 
<label for="subject">Subject *</label> 
<input type="text" name="subject"/></br> 
<label for="message">Your message *</label> 
<textarea id="txtarea" name="message" form="contact"></textarea> 
<input type="submit" value="Send"/> 
</form> 

そしてこの

function validateMail(mail) { 
var re = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|  (\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
return re.test(mail); 
} 
function validate(){ 
var x = document.forms["contact"]; 
if (x[0].value == null || x[0].value == ""){ 
    alert("Your mail address"); 
    return false; 
}else{ 
    if(!validateMail(x[0].value)){ 
     alert("mail address not valid"); 
     return false; 
    } 
} 
if(x[1].value == null || x[1].value == ""){ 
    alert("Add a subject"); 
    return false; 
} 
if(x['txtarea'].value.length < 1 || x['txtarea'].value == '' || x['txtarea'].value == null){ 
    alert("Add your message"); 
    return false; 
} 
} 

このコードはIE11(11.0.9600.18500)に完璧に動作しますが、クロム54.0.2840.71メートル(64ビット)およびFF 49.0.2はちょうど私のJavaScriptを無視して続行するJavaScript空欄または有効な情報がないメールを送信する。

PS:私は、フォーム[#]オプション

編集でそれを見つける傾けるので、テキストエリアのIDを使用してイム:私はIEが適切に[オブジェクトHTML TextAreaElement]としてテキストエリアを識別することがわかったが、ChromeとFirefoxの両方のために使用してそれを解決するために管理され、未定義の

+0

フォームの名前が連絡先で、あなたがdocument.forms [「連絡先ヘルプを」]使用しているために少し最適化されたJavaScriptの関数です。それはタイプミスですか?それはdocument.forms ["contact"]ではありません。 ..? –

+0

'onsubmit =" return validate() "'を使う代わりに、 'onsubmit =" validate() "'を直接使うこともできます。 –

+0

@HimanshuAggarwal:いいえ、できません。関数がfalseを返す場合、後者はフォームの送信を妨げません。 – CBroe

答えて

0

問題は、あなたのtextareaであり、それからform="contact"を削除します。あなたは下記のフォームを使用することができます -

<form name="contact" action="mailto:[email protected]&subject=subject&body=message" onsubmit="return validate()" method="post" enctype="text/plain"> 
    <label for="mail">Your mail address *</label> 
    <input type="email" name="mail" /></br> 
    </br> 
    <label for="subject">Subject *</label> 
    <input type="text" name="subject" /></br> 
    <label for="message">Your message *</label> 
    <textarea id="txtarea" name="message"></textarea> 
    <input type="submit" value="Send" /> 
</form> 

そして、ここであなたのフォーム -

function validateMail(mail) { 
    var re = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|  (\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
    return re.test(mail); 
} 

function validate() { 
    var x = document.forms["contact"]; 
    if (!x[0].value) { 
     alert("Your mail address"); 
     return false; 
    } else { 
     if (!validateMail(x[0].value)) { 
      alert("mail address not valid"); 
      return false; 
     } 
    } 
    if (!x[1].value) { 
     alert("Add a subject"); 
     return false; 
    } 
    if (!x['txtarea'].value) { 
     alert("Add your message"); 
     return false; 
    } 
} 
+0

3つのブラウザで完全に動作します。ありがとう –

0

です:

if(document.getElementById('txtarea').value.length < 1 || document.getElementById('txtarea').value == '' || document.getElementById('txtarea').value == null) 

の代わり:

if(x['txtarea'].value.length < 1 || x['txtarea'].value == '' || x['txtarea'].value == null) 

クロムまたはFirefoxのどちらが適切にフォームを処理することができますので、[「ID」]

関連する問題