Javascript 我试图在循环时组合字符串

Javascript 我试图在循环时组合字符串,javascript,jquery,Javascript,Jquery,如果选中前两个框,我试图得到的结果将是12,如果选中3个框,结果将是13。x显示为未定义。我假设这与变量范围有关,但即使我在输入函数中查看x,它一次只显示一个选择,它也不会对它们进行组合 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> <script> function MLSNumbersSelected() { $("i

如果选中前两个框,我试图得到的结果将是12,如果选中3个框,结果将是13。x显示为未定义。我假设这与变量范围有关,但即使我在输入函数中查看x,它一次只显示一个选择,它也不会对它们进行组合

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

函数mlsnumberselected()
{
$(“输入:复选框”).each(函数(){
var$this=$(this);
如果($this.is(“:checked”)){
var x=x++$this.attr(“id”);
}
});
警报(x);//应等于检查的值,例如1或12。
}

1
2
三,

勾选一些选项,然后单击按钮。


您必须在
.each()循环之外声明x。现在,它是在
.each()
循环中声明的,然后在调用下一个回调之前,它超出范围,因此您无法将它的值从一个回调累积到下一个回调:

function MLSNumbersSelected() {
    var x = "";
    $("input:checkbox").each(function(){  
        if (this.checked) {
            x += " " + this.id;
        }
    });
    console.log(x);
}
仅供参考,我还从循环中删除了jQuery的使用,因为当DirectDOM属性已经提供了您所需要的一切时,就不需要jQuery了


您还可以通过向选择器添加
:checked
,使其仅选择已选中的复选框,让选择器为您完成工作。然后,您可以使用
.map()
.join()
更轻松地创建列表:

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

必须在
.each()
循环之外声明x。现在,它是在
.each()
循环中声明的,然后在调用下一个回调之前,它超出范围,因此您无法将它的值从一个回调累积到下一个回调:

function MLSNumbersSelected() {
    var x = "";
    $("input:checkbox").each(function(){  
        if (this.checked) {
            x += " " + this.id;
        }
    });
    console.log(x);
}
仅供参考,我还从循环中删除了jQuery的使用,因为当DirectDOM属性已经提供了您所需要的一切时,就不需要jQuery了


您还可以通过向选择器添加
:checked
,使其仅选择已选中的复选框,让选择器为您完成工作。然后,您可以使用
.map()
.join()
更轻松地创建列表:

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

在循环中重新初始化x。这将解决您的问题:

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

在循环中重新初始化x。这将解决您的问题:

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

使用此选项查看它是否实现了您所需的功能:

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

使用此选项查看它是否实现了您所需的功能:

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

每次在循环中都定义x,而不是定义一次x,并通过循环一直附加到它。 例如:


函数mlsnumberselected()
{
var x;
$(“输入:复选框”).each(函数(){
var$this=$(this);
如果($this.is(“:checked”)){
x++=“”+$this.attr(“id”);
}
});
警报(x);//应等于检查的值,例如1或12。
}

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


函数mlsnumberselected()
{
var x;
$(“输入:复选框”).each(函数(){
var$this=$(this);
如果($this.is(“:checked”)){
x++=“”+$this.attr(“id”);
}
});
警报(x);//应等于检查的值,例如1或12。
}
$(函数(){
$('#按钮')。在('单击',函数()上){
var x=$(':复选框:选中').map(函数(){
返回此.id;
})
.get().join(“”);
警报(x);
});
});

1
2
三,

勾选一些选项,然后单击按钮。

$(函数(){
$('#按钮')。在('单击',函数()上){
var x=$(':复选框:选中').map(函数(){
返回此.id;
})
.get().join(“”);
警报(x);
});
});

1
2
三,

勾选一些选项,然后单击按钮。