datepicker.js更新日期由用户

时间:2017-03-18 01:33:52

标签: javascript jquery twitter-bootstrap date datepicker

我正在使用名为bootstrap-datepicker.js的库(尽管不使用最新版本)。

我有一个日历输入,我想在用户选择日期后更新到最近的星期一。为此,我有以下代码:

HTML

<div class="form-group" id="data">
    <div class="input-group date">
        <input id="control-monday" value="01/01/2000" type="text">
    </div>
</div>

的Javascript

$('#data .input-group.date').datepicker({
    startView: 1,
    todayBtn: "linked",
    keyboardNavigation: false,
    forceParse: false,
    autoclose: true,
    format: "dd/mm/yyyy",
    weekStart: 1,
    endDate: "0d"
}).on('changeDate', DateUpdated);


function DateUpdated(e) {  

    PickedDate = e.date; 
    //Finding monday
    monday = ....;

    $("#control-monday").datepicker("setDate", monday);
    $("#control-monday").val(monday);


}

问题在于每次使用DateUpdated()将日期更新为最接近的星期一时,自更新日期后该函数再次被触发并变为无限循环。有没有办法只在用户手动选择日期而不是Jquery执行时才触发函数DateUpdated()?

解释发生了什么:

  1. 用户选择日期
  2. 由于.on('changeDate', DateUpdated);
  3. 而调用DateUpdated()
  4. 日期更新为最接近的星期一$("#control-monday").datepicker("setDate", monday);
  5. 由于日期在第3点更改,DateUpdated()由于.on('changeDate', DateUpdated);
  6. 而被称为AGAIN
  7. 3和4永远。
  8. 我目前正在使用一个全局变量来计算函数被调用的次数,并且只在第一次触发它并在2次调用后重新启动计数但它有点难看并且非常不稳定。

1 个答案:

答案 0 :(得分:0)

您可以添加其他标记。

function DateUpdated(e, flag) {  
    if (typeof flag === "undefined") {
         // call when user manually picked
    }
}

因此,当您尝试从代码中调用DateUpdated时,可以调用DateUpdated(e, true);

如果从代码中调用时很难添加标记,则可以在触发事件时添加标记。

$('#data .input-group.date').datepicker({
    startView: 1,
    todayBtn: "linked",
    keyboardNavigation: false,
    forceParse: false,
    autoclose: true,
    format: "dd/mm/yyyy",
    weekStart: 1,
    endDate: "0d"
}).on('changeDate', function(e) {
    DateUpdated(e, true);
});

function DateUpdated(e, flag) {  
    if (typeof flag !== "undefined") {
         // call when user manually picked
    }
}

好的,因为你只想找到最接近的星期一并防止无限循环。你可以做这样的事情:

function DateUpdated(e) {  

    PickedDate = e.date; 
    //Finding monday
    monday = ....;

    if (monday !== e.date) {
       $("#control-monday").datepicker("setDate", monday);
       $("#control-monday").val(monday);
    }
}