我有一个按钮,单击该按钮时将显示一个日历,供用户更改项目的日期。选择日期后,将出现确认对话框,以确保用户想要继续。我的代码当前面临的问题是,当显示日历并让用户说单击背景时,日历消失了。当用户再次单击按钮并继续选择日期时,可能会多次出现确认对话框,这可能是由于先前的尝试。有人知道如何解决这个问题吗?
function reschedule(){
event.preventDefault();
$("#change").datetimepicker({
"format" : "yyyy-mm-dd hh:ii:ss",
"autoclose" : true,
"startDate" : new Date(),
pickerPosition: 'bottom left'
}).on('changeDate', function (input) {
if ( confirm("Move to " + new Date(input.date).toISOString() + "?") ) {
// code to change date
}
});
$("#change").datetimepicker("show");
}
答案 0 :(得分:0)
可能是,每次用户单击按钮时,您都在调用reschedule()
函数,这会使相同的“ changeDate”事件多次附加到元素上。
为防止这种情况,您可以尝试将用于初始化日期时间选择器的代码移到reschedule()
函数之外。
请参见下面的代码。
$("#change").datetimepicker({
"format" : "yyyy-mm-dd hh:ii:ss",
"autoclose" : true,
"startDate" : new Date(),
pickerPosition: 'bottom left'
}).on('changeDate', function (input) {
if ( confirm("Move to " + new Date(input.date).toISOString() + "?") ) {
// code to change date
}
});
function reschedule(){
event.preventDefault();
$("#change").datetimepicker("show");
}
答案 1 :(得分:0)
我设法找出解决方案,只需要在隐藏日历时取消绑定即可。
function reschedule(){
event.preventDefault();
$("#change").datetimepicker({
"format" : "yyyy-mm-dd hh:ii:ss",
"autoclose" : true,
"startDate" : new Date(),
pickerPosition: 'bottom left'
}).on('changeDate', function (input) {
if ( confirm("Move to " + new Date(input.date).toISOString() + "?") ) {
// code to change date
}
}).on('hide', function () {
$("#change").unbind();
});
$("#change").datetimepicker("show");
}