datepicker.js当用户更新日期时更新日期

datepicker.js当用户更新日期时更新日期

问题描述:

我正在使用名为bootstrap-datepicker.js的库(尽管不使用最新版本)。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. DateUpdated()被调用由于.on('changeDate', DateUpdated);
  3. 的日期更新到最近的星期一$("#control-monday").datepicker("setDate", monday);
  4. 由于日期在点3更改DateUpdated()称为重新由于.on('changeDate', DateUpdated);
  5. 3和4永远。

我目前正在使用一个全局变量来计算函数被调用了多少次,并且只在第一次启动时触发它,并在2次调用后重新启动计数,但它有点难看且非常不稳定。

+0

我终于“(CHANGEDATE‘)通过更新引导日期选择器到最新版本,以阻止重新着火。对固定”这个’此外,阿贾克斯再次发射多时间事件,所以我修复它下面这个https://stackoverflow.com/questions/22614041/bootstrap-datepicker-on-change-firing-3-times#22614264 – Joe

您可以添加额外的标志。

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); 
    } 
} 
+0

谢谢。我目前使用标志来计算发射次数这个函数只有第一个触发,但是非常难看,因为函数库的限制,我不能在函数DateUpdated()中发送任何参数 – Joe

+0

@Joe,我已经更新了答案 – invisal

+0

既没有工作,问题是当Jquery更改日期:'$(“#control-monday”)。datepicker(“setDate”,monday)'DateUpdate()由于'',我的控制功能会自动触发。on('changeDate'DateUpdated)'所以我发送true或undefined函数的参数将保持不变,无论是用户还是Jquery。希望你明白我的观点。 – Joe