-1

可能重复:
在 Javascript 中休眠

我想在 JavaScript 中创建一个睡眠功能,我必须在用户执行操作之前停止任何代码执行(例如 alert() 行为)

我需要的正是:我应该在此处插入什么以使其工作?

window.alert = function(message){
    var dialog = $('<div>'+message+'</div>').dialog({
        title:'Alert',

        buttons:{
            'Ok': function(){
                $(this).dialog('close').data('open', false);
                $(this).remove();
            }
        }
    }).data('open', true);
    //What to insert here?
}
4

3 回答 3

1

jQuery 延迟是最好的方法。它提供了一个很好的回调框架,以便更容易维护回调。

我做了一个新功能,因为有些浏览器可能不允许你重新定义alert.

myAlert = function(message){
var dfd = new $.Deferred();

var dialog = $('<div>'+message+'</div>').dialog({
    title:'Alert',

    buttons:{
        'Ok': function(){
            $(this).dialog('close').data('open', false);
            $(this).remove();
            dfd.resolve();
        }
    }
}).data('open', true);
return dfd.promise();
}

然后

myAlert(message).done(function() { callback here });

如果你想要你评论的内容,那就是这样。

myAlert(1).done(function() { myAlert(2) });
于 2012-04-20T12:52:27.273 回答
1

您应该在这里使用回调,因为如果您停用 javascript,用户将无法单击“确定”

window.alert = function(message, callback){
    var dialog = $('<div>'+message+'</div>').dialog({
        title:'Alert',

        buttons:{
            'Ok': function(){
                $(this).dialog('close').data('open', false);
                $(this).remove();
                typeof callback=='function' && callback(); //check if callback, and execute it
            }
        }
    }).data('open', true);
}
alert('test',function(){console.log('The user has clicked on the ok');});

编辑:

如果您只想暂停alert执行而不是其他代码执行,您可以执行以下操作(我没有尝试过,但想法就在这里):

var alertStack=[];
window.alert = function(message){
  if(!message || !alertStack.length)
    $('<div>'+(alertStack[0] || message)+'</div>').dialog({
      title:'Alert',

      buttons:{
        'Ok': function(){
          alertStack.shift()
          $(this).dialog('close').data('open', false);
          $(this).remove();
          alertStack.length && alert();
        }
      }
    }).data('open', true);

  message && alertStack.push(message);
}
alert('test');
alert('test2');
alert('test3');
于 2012-04-20T12:56:06.023 回答
0

当您想推迟执行代码但又不想重复执行时,请使用 setTimeout()。

于 2012-04-20T12:58:08.183 回答