-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を非アクティブ化すると、ユーザーが「OK」をクリックできなくなるためです。

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 に答える