JavaScript中的循环通过复选框无效

Looping through check-box in JavaScript not working

本文关键字:复选框 无效 循环 JavaScript      更新时间:2023-09-26

我目前正在构建一个订单表单,但我正在测试的循环检查复选框的方法似乎不起作用。我做错了什么?从逻辑上讲,这似乎很好——如果有任何帮助,我将不胜感激。提前感谢:-(

<script>
function order()
{
for(i=1;i<=7;i++)
{   
alert(document.orderForm.order[i].checked);
}
}
</script>
    <form name='orderForm'>
      <p>Basic choices:</p>
      <p>
        <input type='checkbox' id='order1' name='order1' value='90' />
        <label for="1">&nbsp;Nano 1GB (&pound;90)</label>
        <br>
        <input type='checkbox' id='order2' name='order2' value='155' />
        <label for="2">&nbsp;Nano 4GB (&pound;155)</label>
        <br>
        <input type='checkbox' id='order3' name='order3' value='200' />
        <label for="3">&nbsp;Video 30GB (&pound;200)</label>
        <br>
        <input type='checkbox' id='order4' name='order4' value='275' />
        <label for="4">&nbsp;Video 60GB (&pound;275)</label>
      </p>
      <p>Options:</p>
      <p>
        <input type='checkbox' id='order5' name='order5' value='90' />
        <label for="5">&nbsp;Engraving (&pound;10)</label>
        <br>
        <input type='checkbox' id='order6' name='order6' value='15' />
        <label for="6">&nbsp;Carrying case (&pound;15)</label>
        <br>
        <input type='checkbox' id='order7' name='order7' value='18' />
        <label for="7">&nbsp;Car power adapter (&pound;18)</label>
      </p>
      <p>
        <input type="button" onClick="order();">
      </p>
      <p>Order Total</p>
      <p>
        <input type="text" name="orderTotal" id="orderTotal">
      </p>
      <p>VAT</p>
      <p>
        <input type="text" name="vat" id="vat">
      </p>
      <p>Order Total (+VAT)</p>
      <p>
        <input type="text" name="orderTotal_vat" id="orderTotal_vat">
      </p>
    </form>

document.orderForm.order不是数组。事实上,它并不存在。你需要这样构建你的id:

function order() {
    for(i=1;i<=7;i++) {   
        alert(document.orderForm["order" + i].checked);
    }
}

这是一把正在工作的小提琴。

您当前的函数实现似乎不正确。。这里的解决方案是你的功能应该是什么样子的:

<script>
function order()
{
for(i=1;i<=7;i++)
{   
alert(document.getElementById("order"+i).checked);
}
}
</script>

或者你可以修改你的名字,然后让它发挥作用。您尝试使用的数组是由在复选框之间共享的名称构成的。

<script>
function order()
{
with(document.orderForm)
    {
for(var i = 0; i < orderName.length; i++){
alert(orderName[i].checked);
}
    }
    }

</script>
    <form name='orderForm'>
      <p>Basic choices:</p>
      <p>
        <input type='checkbox' id='order1' name='orderName' value='90' />
        <label for="1">&nbsp;Nano 1GB (&pound;90)</label>
        <br>
        <input type='checkbox' id='order2' name='orderName' value='155' />
        <label for="2">&nbsp;Nano 4GB (&pound;155)</label>
        <br>
        <input type='checkbox' id='order3' name='orderName' value='200' />
        <label for="3">&nbsp;Video 30GB (&pound;200)</label>
        <br>
        <input type='checkbox' id='order4' name='orderName' value='275' />
        <label for="4">&nbsp;Video 60GB (&pound;275)</label>
      </p>
      <p>Options:</p>
      <p>
        <input type='checkbox' id='order5' name='orderName' value='90' />
        <label for="5">&nbsp;Engraving (&pound;10)</label>
        <br>
        <input type='checkbox' id='order6' name='orderName' value='15' />
        <label for="6">&nbsp;Carrying case (&pound;15)</label>
        <br>
        <input type='checkbox' id='order7' name='orderName' value='18' />
        <label for="7">&nbsp;Car power adapter (&pound;18)</label>
      </p>
      <p>
        <input type="button" onClick="order();">
      </p>
      <p>Order Total</p>
      <p>
        <input type="text" name="orderTotal" id="orderTotal">
      </p>
      <p>VAT</p>
      <p>
        <input type="text" name="vat" id="vat">
      </p>
      <p>Order Total (+VAT)</p>
      <p>
        <input type="text" name="orderTotal_vat" id="orderTotal_vat">
      </p>
    </form>

Fiddle:http://jsfiddle.net/P7CKG/

如果你认为这会让你感到困惑,则不使用:

<script>
function order()
{
for(var i = 0; i < document.orderForm.orderName.length; i++){
alert(document.orderForm.orderName[i].checked);
}
}  
</script>

您的函数失败,因为表单元素未命名为order[1]order[2]等:它们的名称为order1order2。因此,代码document.orderForm.order[i]不引用任何内容。

此外,您应该避免通过document.formName机制访问表单,而是通过ID获取元素。同样,使用form.elements[elementName]而不是form.elementName。根据我的经验,这些在用户代理之间更加一致。

function order () {
    var frm = document.getElementById('orderForm');
    for(i=1;i<=7;i++) {   
      alert(frm.elements['order'+i].checked);
    }
    return false;
}
function order(){
    var arrChks = document.orderForm.getElementsByTagName('input');
    for(i=0;i<arrChks.length;i++){
        if(arrChks[i].type=='checkbox'){
            alert(arrChks[i].checked);
        }
    }
}

但我建议您使用jquery或其他javascript框架!

完整的示例!http://jsbin.com/amesek/

佐尔维德!