1

ページのフォーム内にチェックボックスが含まれています。ユーザーがボタンをクリックすると、チェックボックス内のどの項目が選択されているかを調べる必要があります。

これを次のコードで問題なく動作させることができます。

for (i=0; i < Form3.CBox1.length; i++)
  if (Form3.CBox1[i].checked)
   {
   Answer = Answer + Form3.CBox1[i].value + ",";
   } 
alert(Answer);

私が抱えている問題は、ページで上記の関数を数回呼び出し、フォームとチェックボックスの名前をハードコーディングする代わりに変数を渡したいことです。このJavascriptを実行するたびに、何も返されません。次のコードの変数 vCurrForm と vCurrCBox は、以前に別の関数で設定されており、それらが正しく設定されていることを確認するためにテストしましたが、このコードを動作させることができません。

for (i=0; i < vCurrForm.vCurrCBox.length; i++)
  if (vCurrForm.vCurrCBox[i].checked)
   {
   Answer = Answer + vCurrForm.vCurrCBox[i].value + ",";
   } 
alert(Answer);

どんな助けでも大歓迎です。ありがとう

4

4 に答える 4

1

変数をオブジェクトのキーとして扱う場合、配列構文 (つまり[]s) を使用する必要があります。これだけで、次の (まだ壊れている) コードが得られます。

for (i=0; i < vCurrForm[vCurrCBox].length; i++)
{
    if (vCurrForm[vCurrCBox][i].checked)
   {
       Answer = Answer + vCurrForm[vCurrCBox][i].value + ",";
   }
}
alert(Answer);

問題は、vCurrFormそれがその変数の文字列名であるにもかかわらず、まだ通常の古い変数として扱われていることです。このため、親から参照する必要があります。window:

for (i=0; i < window[vCurrForm][vCurrCBox].length; i++)
{
    if (window[vCurrForm][vCurrCBox][i].checked)
   {
       Answer = Answer + window[vCurrForm][vCurrCBox][i].value + ",";
   }
}
alert(Answer);
于 2012-10-29T21:32:29.227 に答える
0

これらの値をどのように宣言および設定しているかを確認しないと、問題を確認することは非常に困難です。これは、変数が設定されているオブジェクトのタイプ、またはそれらのスコープに関連している可能性があります。確認すべき点は次のとおりです。

  1. 変数vCurrForm.vCurrCBoxが配列であることを確認してください。
  2. vCurrFormとvCurrCBoxが、呼び出されている関数にアクセスできるスコープで宣言されていることを確認してください。
  3. この場合、vCurrFormをフォームオブジェクトに設定し、vCurrCBoxをチェックボックスコントロールの配列に設定していることを確認してください。

提供されたコードを見ると、参照されている変数は単一の項目(現在のチェックボックス)のものであるとほとんど思います。その場合、あなたはおそらくあなたが探している結果を得るつもりはありません。

可能かどうかを検討する他の何かは、JQueryを使用して、チェックされたボックスをより簡単に取得し、それらの値を連結することです。JQueryでは、コードは次のようなもので実行できます。

var Answers = "";
$("input[type='checkbox']:checked").each(function() { Answers += $(this).val() + ", "; });
于 2012-10-29T21:38:11.303 に答える
0

または、文字列と照合するのではなく、要素を含む配列への参照を渡すことをお勧めします。例えば:

function getAnswers(items) {
   for (var i = 0; i < items.length; i++)
   {
       if (items[i].checked) {
           Answer = Answer + items[i].value + ",";
       }
   }
}
于 2012-10-29T21:39:34.723 に答える
0

いつもお世話になっております。私は自分のやり方の誤りを見てきました。

以下は私のために働いた

**for (i=0; i < document[vCurrForm][vCurrCBox].length; i++)
    if (document[vCurrForm][vCurrCBox][i].checked)
              {
        Answer = Answer + document[vCurrForm][vCurrCBox][i].value + ",";
        }**
于 2012-10-30T07:06:57.123 に答える