我正在使用名为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()?
解释发生了什么:
.on('changeDate', DateUpdated);
$("#control-monday").datepicker("setDate", monday);
.on('changeDate', DateUpdated);
我目前正在使用一个全局变量来计算函数被调用的次数,并且只在第一次触发它并在2次调用后重新启动计数但它有点难看并且非常不稳定。
答案 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);
}
}