2011-12-22 18 views
1

グローバル化できるバージョンですべてのJavaScriptの確認と警告機能を更新する必要があるグローバリゼーションプロジェクトに取り組んでいます。私はここで主題について質問されたいくつかの質問を読んでいたが、コールバック機能を使っていた解決策は見つけられなかった。これらの関数を新しく定義されたダイアログに置き換えても、スクリプトの実行は停止しません。コールバック関数は必要ですが、実装にはいくつか問題があります。以下はjQueryとコールバック関数を使用したjavascriptのアラート/確認の無効化

今起こっていただきました私は

PromptForExit = function() { 
$(document).ready(function() { 
     //new confirm 
     $dialog_confirm = $('<div></div>').dialog({ 
      resizable: false, 
      height: 100, 
      modal: true, 
      autoOpen: false, 
      buttons: { 
       "Ok - Configurable": function() { 
        $(this).dialog("close"); 
        return true; 
       }, 
       "Cancel - Configurable": function() { 
        $(this).dialog("close"); 
        return false; 
       } 
      } 
     }); 
     //new alert 
     $dialog_alert = $('<div></div>').dialog({ 
      resizable: false, 
      height: 140, 
      modal: true, 
      autoOpen: false, 
      buttons: { 
       okVal: function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 
     //override alert 
     window.alert = function (msg) { 
      $dialog_alert.html(msg).dialog('open'); 
     }; 
     //override confirm 
     window.confirm = function (msg) { 
      $dialog_confirm.html(msg).dialog('open'); 
     }; 
    }); 

    //alert testing 
    var anAlert = alert("jQuery alert"); 
    alert(EmptyFunc(anAlert)); 
    anAlert = alert("jQuery alert2"); 
    alert(EmptyFunc(anAlert)); 

    //confirm testing 
    var resp = confirm("jQuery confirm"); 
    confirm(TempFunc(resp)); 
    resp = confirm("jQuery confirm 2"); 
    confirm(TempFunc(resp)); 
}; 

TempFunc = function (response) { 
    if (response) { 
     //take action if user choose OK 
    } 
    else { 
     //different flow if they choose cancel 
    } 
}; 

EmptyFunc = function (anAlert) { 
    return true; 
}; 

に取り組んできました/ javascriptのブロックであるjQueryのコードは、非常に最後の「jQueryの2を確認する」、示されていないが、他のいずれますされています。私はコールバック関数が正しく設定されていないので、これが起こっていると思いますが、anAlertとrespは確認やアラートに設定した後でも常に定義されていないことに気付きました。ヘルプをよろしくお願いいたします。

+0

* real * "alert()"と "confirm()"の動作を複製することができないことに注意してください。ブラウザは、ユーザによる置換が返答されるのを「待機」しません。したがって、 "alert()"と "confirm()"が正常に動作することを期待するコードは壊れてしまいます。 – Pointy

+1

[アラートを上書きしてJavascriptで確認する](http://stackoverflow.com/questions/5560367/override-alert-and-confirm-in-javascript)の回答を参照してください。 @Pointyが述べたように、ブロック動作は複製されません。 –

答えて

0

メッセージのキューを導入します。 closeイベントをキャッチします。キューが空の場合は何もしないでください。そうでない場合は、関数を呼び出して次のメッセージをポップアップし、適切なダイアログを表示します。 alert/confirmは、メッセージをそのタイプと共にキューに入れ、その時点でダイアログが表示されない場合は上記の関数を呼び出す必要があります。

関連する問題