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()?
来解释发生了什么事有点远:
- 用户选择一个日期
- DateUpdated()被调用由于
.on('changeDate', DateUpdated);
- 的日期更新到最近的星期一
$("#control-monday").datepicker("setDate", monday);
- 由于日期在点3更改DateUpdated()称为重新由于
.on('changeDate', DateUpdated);
- 3和4永远。
我目前正在使用一个全局变量来计算函数被调用了多少次,并且只在第一次启动时触发它,并在2次调用后重新启动计数,但它有点难看且非常不稳定。
您可以添加额外的标志。
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);
}
}
谢谢。我目前使用标志来计算发射次数这个函数只有第一个触发,但是非常难看,因为函数库的限制,我不能在函数DateUpdated()中发送任何参数 – Joe
@Joe,我已经更新了答案 – invisal
既没有工作,问题是当Jquery更改日期:'$(“#control-monday”)。datepicker(“setDate”,monday)'DateUpdate()由于'',我的控制功能会自动触发。on('changeDate'DateUpdated)'所以我发送true或undefined函数的参数将保持不变,无论是用户还是Jquery。希望你明白我的观点。 – Joe
我终于“(CHANGEDATE‘)通过更新引导日期选择器到最新版本,以阻止重新着火。对固定”这个’此外,阿贾克斯再次发射多时间事件,所以我修复它下面这个https://stackoverflow.com/questions/22614041/bootstrap-datepicker-on-change-firing-3-times#22614264 – Joe