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 回答