【问题标题】:Custom confirm box in JQuery that returns a boolean valueJQuery 中返回布尔值的自定义确认框
【发布时间】:2014-08-25 17:00:09
【问题描述】:

我正在使用 JQuery 和 JQuery UI,我尝试使用 JQuery UI Dialog 来解决这个问题,但我无法完成。

基本上我有例如这个使用 JS 确认框的代码:

// if user presses cancel, do not proceed to the next section of the code
if ( ! confirm('Are you sure you want to press OK?')) {
  return;
}

.... Lots of code below

我想将其转为使用可以使用 CSS 自定义的自定义框。我尝试了 UI 对话框:

function confirmIt(text) {
   $('#confirm_dialog').dialog({
      width: 300,
      height: 150,
      buttons: {
         "OK": function() { return true; },
         "Cancel": function() { return false; }
      }
   });
}

if ( ! confirmIt('Are you sure you want to press OK?')) {
   return;
}
.... Lots of code below

现在上面代码的问题是 if 条件下的很多代码仍然执行。我知道 JQuery Dialog 是 aync 进程,但我想知道是否有这样的免费插件,我可以使用它来返回布尔值?基本上功能方面它应该与 JS confirm() 完全相同。我不想在 JQuery UI 对话框的回调中包装大量代码来实现这一点。如果CANCEL is clicked,我只想停止脚本执行,如果OK is clicked,我只想继续执行。

【问题讨论】:

  • 这是不可能的,因为这些对话框有“回调”,会在某些操作上被调用(例如单击“确定”)。原生方法 promptalertconfirm 将等待用户输入并暂停脚本执行
  • @revaxarts 没有办法像 JS 原生方法一样暂停脚本执行?
  • 我已经在我的回答中解释了一个可能的解决方案
  • 关于您刚才删除的问题,请考虑在 SO 聊天室中询问硕士课程。

标签: jquery jquery-ui jquery-ui-dialog


【解决方案1】:

由于无法停止脚本执行 (except for debugging),您应该更改您的方法:

function confirmIt(text, okFunc, cancelFunc) {
   $('#confirm_dialog').dialog({
      width: 300,
      height: 150,
      buttons: {
         "OK": okFunc && okFunc,
         "Cancel": cancelFunc && cancelFunc
      }
   });
}

confirmIt('Are you sure you want to press OK?', function(){
    .... Lots of code below
}, function(){
    ...function on cancel (which can be empty)
});

所以如果您对取消按钮没有任何操作,请使用

confirmIt('Are you sure you want to press OK?', function(){
    .... Lots of code below
});

confirmIt('Are you sure you want to press OK?', confirmFunction);

function confirmFunction(){
    .... Lots of code below
}

【讨论】:

  • okFunc && okFunc() -> okFunc && okFunc 或简单的okFunc
  • 我明白了,这就是我的想法。我想尽量避免在 confirmIt 函数中放置“大量代码”,但我想没有其他方法。谢谢你的回答哥们。 +1
  • @KevinB okFunk && okFunc() 将仅在 okFunc 存在时执行。 okFunk && okFunk 将简单地返回 true(如果已定义)但不会执行 okFunc。好的? ;)
  • @GGio 你可以避免使用confirmIt('Are you sure you want to press OK?', confirmFunction) 的匿名函数来在专用方法中移动代码。我已经更新了答案
  • @revaxarts 我的意思是您正在立即执行该函数,而不是在单击按钮时将其传递给稍后执行。
猜你喜欢
  • 2012-08-29
  • 2015-03-05
  • 2014-11-15
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 2013-09-11
相关资源
最近更新 更多