JavaScriptで1つのチェックが無効になると、フォームの検証が中断されます

javascript validation
JavaScriptで1つのチェックが無効になると、フォームの検証が中断されます

それぞれがメールのグループに関する2つのテキストエリアを含むフォームがあります。

また、社内基準に従って、メールが適切にフォーマットされているかどうかを確認する機能があります。

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

フィールドのクラスが無効に設定されている場合、次のスタイルが適用されます。

.invalid
{
background-color:#fffacd;
}

textareaのいずれかで値が変更されると、次の関数が呼び出され、値のいずれかが正しくフォーマットされていないかどうかがチェックされます。そうでない場合、送信ボタンは無効になります。

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

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

  0  0


ベストアンサー

この理由は、最後のビットで「validform」変数を取得する方法です。 JavaScriptは他の多くの言語と同じように機能し、真である可能性がない場合はブール値の「AND」でそれ以上進むことはありません。

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

最初の checkmail()`がfalseの場合、 `validform`がtrueになる可能性のある方法がないため、2番目の checkmail() `を実行する必要はありません。 `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;
}

2


タイトルとURLをコピーしました