我想在循环时组合一个字符串

时间:2015-05-20 23:12:26

标签: javascript jquery

如果检查前两个框,我试图得到的结果是1 2,如果选中3个框,结果将是1 2 3. x出现为未定义。我假设这与变量范围有关,但即使我在输入函数中查看x,它一次只显示1个选择,但它没有梳理它们。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script>
function MLSNumbersSelected()
{
    $("input:checkbox").each(function(){  
        var $this = $(this);    
        if($this.is(":checked")){
        var x = x+" "+$this.attr("id");
        }
    });
  alert(x); //should equal what is checked for example 1 or 1 2.
}
</script>
</head>

<body>
    <p id="checkBoxes">
        <input type="checkbox" class="checkBoxClass" id="1" />1<br/>
        <input type="checkbox" class="checkBoxClass" id="2" />2<br/>
        <input type="checkbox" class="checkBoxClass" id="3" />3</p>
    <p>
            Check off some options then click button.
      <input type="button" name="button" id="button" value="Click to Test" onClick="MLSNumbersSelected()">
    </p>
</body>

5 个答案:

答案 0 :(得分:4)

您每次在循环中定义x,而是定义x一次并继续通过循环追加它。 例如:

    <script>
    function MLSNumbersSelected()
    {
        var x;
        $("input:checkbox").each(function(){  
            var $this = $(this);    
            if($this.is(":checked")){
                x += " "+$this.attr("id");
            }
        });
        alert(x); //should equal what is checked for example 1 or 1 2.
    }
    </script>

答案 1 :(得分:1)

您必须在.each()循环之外声明x。就像现在一样,它在.each()循环内声明,然后在调用下一个回调之前超出范围,所以你不能将它的值从一个回调累加到下一个回调:

function MLSNumbersSelected() {
    var x = "";
    $("input:checkbox").each(function(){  
        if (this.checked) {
            x += " " + this.id;
        }
    });
    console.log(x);
}

仅供参考,我还从循环内部删除了jQuery的使用,因为当直接DOM属性为您提供所需的一切时,没有必要这样做。

您还可以让选择器为您完成工作,方法是将:checked添加到选择器,以便它只选择已经选中的复选框。然后,您可以使用.map().join()更轻松地创建列表:

function MLSNumbersSelected() {
    var x = $("input:checkbox:checked").map(function(){  
        return this.id;
    }).get().join(" ");
    console.log(x);
}

答案 2 :(得分:1)

您在循环中重新初始化x。这应该可以解决您的问题:

function MLSNumbersSelected()
{
    var x = '';    
    $("input:checkbox").each(function(){  
        var $this = $(this);    
        if($this.is(":checked")){
        x = x+" "+$this.attr("id");
        }
    });
  alert(x); 
}

答案 3 :(得分:1)

使用它来查看它是否达到了您的需要:

var inputs = $("input:checkbox");
inputs.each(function(i){  
    if(inputs.eq(i).is(":checked")){
    x = x+" "+inputs.eq(i).attr("id");
    }
});

答案 4 :(得分:1)

$(function() {
    $('#button').on('click', function() {
        var x = $(':checkbox:checked').map(function() {
            return this.id;
        })
        .get().join(' ');
        alert( x );
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <p id="checkBoxes">
        <input type="checkbox" class="checkBoxClass" id="1" />1<br/>
        <input type="checkbox" class="checkBoxClass" id="2" />2<br/>
        <input type="checkbox" class="checkBoxClass" id="3" />3</p>
    <p>
            Check off some options then click button.
      <input type="button" name="button" id="button" value="Click to Test">
    </p>