Javascript for循环没有正确递增

时间:2016-01-03 04:50:22

标签: javascript jquery

我很难理解为什么这个for循环似乎没有正确递增。

这可能是太多的上下文,但是......首先,我使用剃刀从给定模型中使用导航按钮创建一组面板:

@foreach (Con c in Model.cList)
{
    <div id="c@(c.Id)Panel" class="panel panel-default" hidden>
        <p id="cText" style="overflow:scroll; height:400px;">@c.Content
        </p>
        <button type="button" class="btn btn-info" id="c@(c.Id)PrevButton">Previous</button>
        <button type="button" class="btn btn-info" id="c@(c.Id)NextButton">Next</button>
    </div>
}

然后,我会获得特定面板中所有选中复选框的列表,以获得用户所需的导航行为:

var checkboxes = [];
$('#selectionPanel input:checked').each(function () {
    checkboxes.push($(this).attr('value'));
});

然后我根据用户的选择使用该信息将导航按钮映射到其他相应的面板:

for (var i = 0; i < (checkboxes.length - 1) ; i++) {
    $("#c" + checkboxes[i] + "NextButton").on("click", function () {
        $("#c" + checkboxes[i] + "Panel").slideUp("500");
        $("#c" + checkboxes[i + 1] + "Panel").show("200");
    });
 }

但是,似乎var i在循环进入slideup和show命令之前递增。例如,以下循环完美运行:

for (var i = 0; i < (checkboxes.length - 1) ; i++) {
    var j = i;
    $("#c" + checkboxes[j] + "NextButton").on("click", function () {
         $("#c" + checkboxes[j] + "Panel").slideUp("500");
         $("#c" + checkboxes[j + 1] + "Panel").show("200");
    });
}

很高兴我得到了它的工作,但真的很困惑为什么简单的for循环没有按预期工作。有什么想法吗?

0 个答案:

没有答案