【问题标题】:JQuery Closure dynamic controlsJQuery 闭包动态控件
【发布时间】:2015-11-26 18:24:01
【问题描述】:

我对闭包有些困惑

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

>

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

谢谢,

【问题讨论】:

  • 对于您发布的代码,只需在您确定存在问题的地方使用 $(this) 而不是 $(oname)。

标签: javascript jquery closures


【解决方案1】:

每个循环 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 次。 [/编辑]

享受(-:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-08
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多