如何防止JavaScript中的多次确认对话框

时间:2019-01-23 06:20:06

标签: javascript

我有一个按钮,单击该按钮时将显示一个日历,供用户更改项目的日期。选择日期后,将出现确认对话框,以确保用户想要继续。我的代码当前面临的问题是,当显示日历并让用户说单击背景时,日历消失了。当用户再次单击按钮并继续选择日期时,可能会多次出现确认对话框,这可能是由于先前的尝试。有人知道如何解决这个问题吗?

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");
}

2 个答案:

答案 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");
}