2010-12-14 7 views
0

メールのグループに関する2つのテキストエリアを含むフォームがあります。javascriptで1つの小切手が無効な場合、フォームの検証が中断されます

<form name="myform" action='entryupdate.php' method="post"> 
    <textarea name="mailgroup1" rows="2" cols="50" onchange="checkFormValue();"> 
    </textarea> 
    <textarea name="mailgroup2" rows="2" cols="50" onchange="checkFormValue();"> 
    </textarea> 
    <input name="update" type="submit" value="Update description"/> 
</form> 

私の内部規範の後に電子メールが整形されているかどうかを確認する機能があります。フィールドはクラスが無効に設定されている場合は

function checkmail(component){ 
    var emailpattern = /^[A-z0-9\._-][email protected][A-z0-9][A-z0-9-]*(\.[A-z0-9_-]+)*\.([A-z]{2,6})$/; 
    var mails = component.value.split(/[\n\r\t ]+/); 
    var valid = true; 
    for(var i=0; i<mails.length; i++){ 
     valid = valid && emailpattern.test(mails[i]); 
     alert("Mail: "+mails[i]+" Valid: "+ emailpattern.test(mails[i])); 
    } 
    if(valid){ 
     component.setAttribute('class', 'valid'); 
    }else{ 
     component.setAttribute('class', 'invalid'); 
    } 
    return valid; 
} 

は、以下のスタイルが適用されます:

値はテキストエリアのいずれかに変更され
.invalid 
{ 
background-color:#fffacd; 
} 

、以下の機能があれば確認した、と呼ばれていますいずれかの値が正しく書式設定されていない場合、送信ボタンが無効になります。

function checkFormValue(){ 
    var validform = true; 
    validform = validform && checkmail(document.myform.mailgroup1) && checkmail(document.myform.mailgroup2); 
    document.hotfixomat.update.disabled = !validform; 
} 

問題は、最初のチェックがfalseを返した場合、その後、第2のチェックが行われていない、そしてそれは値が正しくフォーマットされていないことを起これば、その変更はスタイルが行われていないです。 (ただし、送信ボタンは無効です)。小切手はなぜ中断されますか?

答えて

2

これは、最後のビットにvalidform変数を取得する方法です。他の多くの言語のように動作し、それはおそらく本当のことができない場合は、ブールANDに任意のさらなる行くことはありませんJavaScriptを:

var validform = true; 
validform = validform && checkmail(document.myform.mailgroup1) && checkmail(document.myform.mailgroup2); 

最初checkmail()がfalseの場合、それは第二いずれかを実行する必要はありません。可能であればvalidformが真となる可能性があるためです。 var validform = falseを設定すると、checkmail機能のいずれも実行しません。

例:http://jsfiddle.net/jonathon/Ndw9K/

あなたは両方が呼び出されるようにしたい場合は、あなたがそれを分割し、このような何かを行うことができますようにそれ

var validForm1 = checkmail(document.myform.mailgroup1), 
    validForm2 = checkmail(document.myform.mailgroup2), 
    validForm = validForm1 && validForm2; 

また、あなたはあなたの方法を変更することができます検証したいすべての要素を調べ、変数を変更して返します。

基本的な例:

function checkmailElements(myarray){ 
    var returnVal = true; 

    for(var i = 0; i< myarray.length; i++){ 
     if(!checkmail(myarray[i])){ 
      returnVal = false; 
     } 
    } 

    returnVal; 
} 
関連する問題