JQuery Closure动态控件

时间:2015-11-26 18:24:01

标签: javascript jquery closures

我对闭包感到困惑

<script type="text/javascript">
    $(function () {
        for (var i = 0; i < 7; i++) {
            var cname = '#closingTimePicker' + i;
            $(cname).datetimepicker({
                format: 'LT'
            });

            var oname = '#openingTimePicker' + i;
            $(oname).datetimepicker({
                format: 'LT'
            });

            $(oname).on("dp.change", function (e) {
                $(cname).data("DateTimePicker").minDate(e.date);
            });
            $(cname).on("dp.change", function (e) {
                $(oname).data("DateTimePicker").maxDate(e.date);
               //Loop issue here
            });
        }
    });
</script>

&GT;

在上面的脚本中,我很困惑如何应用闭包,以便我根据循环得到正确的日期选择器。任何建议和重要的解释都会有很大的帮助。

谢谢,

1 个答案:

答案 0 :(得分:0)

每个循环cname和oname都会获得一个新值。因此,当触发oname对象的dp.change时,cname始终是它在循环中获得的最后一个值。

尝试这样的事情:

<script type="text/javascript">
function initPicker(cname, oname)
{
    // paste here the rest of the loop
}

for (var i = 0; i < 7; i++) {
    var cname = '#closingTimePicker' + i;
    var oname = '#openingTimePicker' + i;
    initPicker(cname, oname);
}
</script>

[编辑] 简短说明: 范围与其变量一样长。所以“范围”initPicker用不同的填充变量初始化7次。 [/编辑]

享受( - :