如何在完成特定任务之前使函数不返回?

时间:2015-11-23 09:17:41

标签: javascript jquery confirm

所以,我编写了一个函数来模拟JavaScript confirm框的功能。

如何在完成特定任务之前使函数不返回?此处mconfirm返回undefined。我想根据用户点击true / false返回YesCancel。我怎么能这样做?

var mconfirm = function(message) {
    if(!message)
        message = "Remove the selected item?";
    $("#dialog-confirm").html('<span class="glyphicon glyphicon-alert" id="confirm-alert-ico"></span>&nbsp;' + message);
    $( "#dialog-confirm" ).dialog({
          resizable: false,
          modal: true,
          buttons: {
            Yes: function() {
              $( this ).dialog( "close" );
              return true;
            },
            Cancel: function() {
              $( this ).dialog( "close" );
              return false;
            }
          }  
        });
};

1 个答案:

答案 0 :(得分:1)

您不能等到返回之前完成此类操作。 (关闭对话框与从任何地方获取输入一样异步)

在JS中,您通常会为用户提供一种方法来传递操作完成时调用的函数。 (也就是说,通过回调)。

var mconfirm = function(message, callback) {
if(!message)
    message = "Remove the selected item?";
$("#dialog-confirm").html('<span class="glyphicon glyphicon-alert" id="confirm-alert-ico"></span>&nbsp;' + message);
$( "#dialog-confirm" ).dialog({
      resizable: false,
      modal: true,
      buttons: {
        Yes: function() {
          $( this ).dialog( "close" );
          // Pass whatever you want to the callback
          callback("yes");
          return true;
        },
        Cancel: function() {
          $( this ).dialog( "close" );
          // Pass whatever you want to the callback
          callback("cancel");
          return false;
        }
      }  
    });
};

而不是做类似的事情:

var result = mconfirm("Are you sure ?");
// result is "yes" or "cancel"

来电者会这样做

mconfirm("Are you sure", function(result) {
   // result is "yes" or "cancel"
});