2012-02-19 20 views
0

すべてのフィールドが入力されたときに、このコードですべての値を入力するとはどうしてですか?実際に空の場合にのみ、「すべてのフィールドに記入」メッセージを表示する必要があります。フォームフィールドの妥当性確認

<html> 
<head> 
<title>javascript</title> 
</head> 
<body> 
<h1>test page</h1> 
<hr> 
<script type="text/javascript"> 
function checkForm(form) { 
    for(var i = 0; i<form.elements.length; i++) { 
     if(form.elements[i].value == "") { 
      alert("Please fill out all fields."); 
      return false; 
     } 
    } 
    return true; 
} 
</script> 

<form onSubmit="return checkForm(this)"> 
<input type="text" name="firstName"><br> 
<input type="text" name="lastName"> 
<input type="submit"> 
</form> 
</body> 
</html> 

答えて

1

送信ボタンはフォーム要素であり、値を指定していません。そのため、JSは入力をループし、送信ボタンに戻り、値を見つけずにアラートを生成します。

試してください:あなたのコードは、この場合には、あまりにも送信ボタンを、すべての入力フィールドチェックあるので

function checkForm(form) { 
    for(var i = 0; i<form.elements.length; i++) { 
     if(form.elements[i].type == "input" && form.elements[i].value == "") { 
      alert("Please fill out all fields."); 
      return false; 
     } 
    } 
    return true; 
} 
0

にです。これにあなたの関数を変更します。

function checkForm(form) { 
    for (var i = 0; i < form.elements.length; i++) { 
     if (form.elements[i].value == "" && form.elements[i].type != 'submit') { 
      alert("Fill out ALL fields."); 
      return false; 
     } 
    } 
    return true; 
} 
+0

をフォームにチェックボックスやラジオボタンがあると、これは飛びます。 – Mala

+0

@Mala - フォームにはフォームがありません。もしそうなら、私はそれらをコード化していたでしょう。ちょうどOPのコードに行く。ありがとう。 – j08691

+0

公正ではありますが、私の意見では、意味的には意味的に機能を持たせるほうがよいでしょう。そうでなければ、要素[0]と[1]のチェックが短く、提供されたコードでも動作します。 – Mala

0

あなたはまた、送信ボタンを充填されていることを確認するためにチェックされている これ試してみてください。あなたはおそらくとして「送信しない」したくない

function checkForm(form) { 
    var win = true; 
    elements = form.elements; 
    for(var i = 0; i<elements.length; i++) { 
     if(elements[i].value == "" && elements[i].type != "submit") { 
      win = false; 
     } 
    } 
    if(!win){ 
     alert("please fill out ALL fields!"); 

    } 
    return win; 
}