2011-07-23 13 views
0

私はこの検証のフォーム機能を持っています。このためJavaScriptの簡易チェックが機能しません。

function ValidateForm() { 
    var chks = document.register.elements['sendto[]']; 
    var hasChecked = false; 
    for (var i=0;i<chks.length;i++){ 
     if (chks[i].checked){ 
      hasChecked = true; 
      break; 
     } 
    } 
    if (!hasChecked){ 
     alert("Please select at least one friend."); 
     chks[0].focus(); 
     return false; 
    } 
} 

HTMLは次のとおりです。私は、これは完全なコードではありません

<input type="checkbox" name="sendto[]" value="2" > 

知っています。完全なコードは巨大です。しかし、基本的に私は上記のコードは、ValidateForm()で定義されていないメッセージを与えるコード内のチェックボックスが1つだけ場合。フォームが送信され、上記のチェックボックスがオンになっているときに呼び出されます。

しかし、私はこのようなコードでは2つのチェックボックスがある場合:

<input type="checkbox" name="sendto[]" value="2" > 
<input type="checkbox" name="sendto[]" value="4" > 

をValidateForm()関数は、これが正常に動作する呼び出されたときには、提出します。私はそれがチェックされても1つのチェックボックスのために働いていない何か間違って何か?

+1

登録とは? – lovesh

+0

私は 'register'が彼のフォームの名前だと仮定しています。 –

+0

@ Gurnorどのようにメッセージが未定義であることを知っていますか?コンソールでチェックしていますか? – lovesh

答えて

3

声明

var chks = document.register.elements['sendto[]']; 

は名前sendto[]を持つ唯一の要素があるなら、あなたが持っている名前sendto[] で(要素* *、1、より多くがある場合)の要素を取得しますその要素の参照はchksです。
名前がsendto[]の複数の要素がある場合、chksは、それらの要素の配列への参照を保持します。これを行うと

for (var i=0;i<chks.length;i++){ 

あなたはchks.lengthに基づいてループにしてみてください。 chksが配列の場合(上記参照:sendto[]という名前の要素が複数ある場合)、chks.lengthは配列の要素数を保持します。
一つだけsendto[]の要素がある場合、chksは、その要素を保持し、要素(<input type="checkbox" name="sendto[]" value="2" >)以来のだろうがlengthと呼ばれるプロパティを持っていない、ブラウザが長さが

をindefinedされると言うので、あなたは、O 2を区別していますそこに一つだけsendto[]のチェックボックスで、シナリオ、あるとき、複数の.:

var chks = document.register.elements['sendto[]']; 
    var hasChecked = false; 
//Check whether there is one checkbox or whether there are more  
if(chks.length) 
{ 
    for (var i=0;i<chks.length;i++) 
    { 
     if (chks[i].checked) 
     { 
     hasChecked = true; 
     break; 
     } 
    } 
} 
else 
{ 
    if(chks.checked) 
    { 
     haschecked = true; 
    } 
} 

PS:
コードValidateForm()でメッセージが未定義ですはあまり伝えません。あなたにとっても、これが正しいことが何を意味するのかは明らかではありません(あなたがこの質問をした理由です)。詳細を教えてください。どの最新のブラウザでも、未定義の詳細については、となります。は未定義です。どのブラウザでも未定義のエラーがスローされた行番号が表示されます。これらの詳細を使って、行を見つけて何が起きているのかを調べることができます。あなたはおそらく見つけるでしょう。そうでない場合は、これらの詳細をすべてコミュニティに投稿してください。

+0

あなたの説明はとても良いです。しかし、コードは機能していませんか? – Gurnor

+0

@ Gurnor:_not working_ =?あなたはそれについてもう少し詳しく説明していません。ところで、私の意図は正しいコードを与えるのではなく、正しい方向であなたを指すようにすることです... – Nivas

1
<script language="javascript"> 
function validate() { 
    var chks = document.getElementsByName('sendto[]'); 
    var hasChecked = false; 
    for (var i = 0; i < chks.length; i++) { 
     if (chks[i].checked) { 
      hasChecked = true; 
      break; 
     } 
    } 
    if (hasChecked == false) { 
     alert("Please select at least one friend."); 
     return false; 
    } 
    return true; 
} 
</script> 
0

ここで私はそれをやります。

if(!validate()){ 
    alert("Please select at least one."); 
    return false; 
} 

function validate(){ 
    var els=document.getElementsByName('sendto[]'); 
    for(var i=0;i<els.length;i++){ 
    if(els[i].checked){ 
     return true; 
    } 
    } 
    return false; 
} 

匿名関数としてvalidateを使用できます。

+0

このコードを試している間、私はこの警告を受け取ります:警告:無効な引数foreach()のために提供 – Gurnor

+1

@Gurnor私は各ループごとに。それは私のコード内にあると確信していますか?それは私のために働いているようだ。エラーが発生している場所を示す行番号がありますか? – qw3n

関連する問題