【问题标题】:Looping through a checkbox array that has one element循环遍历具有一个元素的复选框数组
【发布时间】:2012-10-29 05:20:02
【问题描述】:

我有一个名为“tags”的动态创建的复选框列表,我使用 javascript 循环遍历它以确保仅选中 1 并获取值。如果由于某种原因此复选框列表只有一项,我的脚本将不会查看它。当我提醒标签的长度时,我得到了未定义。

    var total=[];
    for (var i=0; i < document.form1.tags.length; i++){
        if(document.form1.tags[i].checked==true){
            total.push(document.form1.tags[i].value);
        }
    }

    if(total.length==0){
        alert("Please select a product to edit.");
    }else if (total.length>1){
        alert("Please select only one product to edit.");
    }else{
        document.location = "go somewhere";
    }

【问题讨论】:

  • .tags 在只有一个复选框时不是数组,它包含对一个复选框的直接引用。只有当有多个同名复选框时,它才会成为节点列表。您应该始终查看开发人员控制台,您会在那里看到错误。
  • @Esailija 使用querySelectorAll 或 jQuery 的另一个原因。

标签: javascript forms checkbox


【解决方案1】:

从我的头顶...如果只有一个复选框被选中,它可能是 document.form1.tags 不是一个数组...

【讨论】:

    【解决方案2】:

    两个建议:

    1. 改用getElementsByName 来获取所有元素,以便您可以迭代它们:

    2. 使用像 jquery 这样的框架。有什么理由不能使用 jquery 或其他框架?你的生活会轻松很多。

    var tags = document.getElementsByName('tags');
    for(var i = 0; i < tags.length; ++i)
    {
        if(tags[i].checked) .....
    }
    

    【讨论】:

      【解决方案3】:

      为什么需要复选框? 这不是使用Radiobuttons 的好机会吗?

      【讨论】:

        【解决方案4】:

        您需要单选按钮。

        <input type='radio' name='tags' value='[whatever]' />
        

        您不必“检查并确保只选择了一个”。并得到 ​​p>

        var tags = document.getElementsByName('tags'),
            value = '', i = 0;
        
        for( ; i < tags.length; i++ )
        {
            if( tags[i].checked ) {
                value = tags[i].value;
                break;
            }
        }
        

        【讨论】:

        • 不能使用单选按钮。根据按下的按钮,允许进行多项选择。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-20
        • 2020-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多