2

ユーザーがページから離れようとした場合にユーザーにプロンプ​​トを表示する次の JavaScript があります。[このページを離れる] と [このページにとどまる] の 2 つのボタンを含むダイアログ ボックスが表示されます。C# イベントを発生させるポストバックを発生させたいと考えています。

「このページを離れる」ボタンが押されたときに、このポストバックが発生するようにします。

これどうやってするの?申し訳ありませんが、私は Javascript にまったく慣れていません。

<script type="text/javascript" language="JavaScript">
var needToConfirm = true;

window.onbeforeunload = confirmExit;
function confirmExit() {
    if (needToConfirm)
        return "You have attempted to leave this page. This will CANCEL your current order selection.";
}

4

2 に答える 2

1

ここでの主な課題は、ユーザーが実際にページを離れる前にJavaScript関数を実行することです。問題は、イベントを処理することです。このイベントをマルチブラウザーシナリオで機能させるには、次を返す必要がonbeforeunloadあるため、ユーザーの選択に反応できません。メッセージとして使用される文字列。各ブラウザは、ユーザーに表示されるカスタムダイアログを作成します。私はあなたが必要とすることをするためのより良いアプローチを見つけていません。基本的に、ブラウザのデフォルトの動作を上書きすることはできません。また、ページをアンロードする必要があるかどうかを示すブール値を返すことはできません。

詳細情報:

MSDNから

window.eventのreturnValueプロパティに文字列が割り当てられると、現在のページにとどまり、割り当てられた文字列を保持するオプションをユーザーに提供するダイアログボックスが表示されます。ダイアログボックスに表示されるデフォルトのステートメント「このページから移動してもよろしいですか?... [OK]を押して続行するか、[キャンセル]を押して現在のページにとどまります。」を削除または変更することはできません。

したがって、この例では、回避策を提案しています。これが最善のアプローチかどうかはわかりませんが、いくつかのオンラインバンクや、Microsoft自体から、サイトにログアウトしたときにこのような動作が見られました。

例:

ASPX

<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
    function showConfirmOnLeave() {
        return $("#showConfirm").prop("checked");
    }
    function onLeavePage() {
        if (showConfirmOnLeave()) {
            return "Don't goo";
        }
        else {
            return undefined;
        }
    }
    $(function () {
        if ($("body").attr('onbeforeunload') == null) {
            $("body").attr('onbeforeunload', 'return onLeavePage(event)');
        }
        $(window).unload(function (event) {
            if (showConfirmOnLeave()) {
                window.open(
                    '<%: this.ResolveClientUrl("~/CallOnLeave.aspx") %>',
                    "_blank",
                    "height=100, location=no, menubar=no, resizable=no, scrollbars=no, status=no, titlebar=no, toolbar=no, width=100, left=1, top=1",
                    false
                );
            }
        });
    });
</script>

<input type="checkbox" id="showConfirm" />  Show confirm on exit?

CallOnLeave.ASPXコードビハインド

    protected void Page_Load(object sender, EventArgs e)
    {
        // add here your custom code, ideally fire a new async thread to execute your commands on the background
    }
于 2012-07-21T12:54:58.367 に答える
0

window.confirm()一緒に使う__doPostBack

このようなもの

window.onbeforeunload = confirmExit;
function confirmExit() {
    if (confirm("Want to exit ??"))
          __doPostBack('btnSave ', "exit confirmed");

}

詳しくは__doPostBack こちら

注:window.onbeforeunloadユーザーが閉じるをクリックしてウィンドウが閉じようとするとイベントが発生するため、テストしたようにサーバー側に移動しますが、クライアントが閉じられるとリクエストがクラッシュし、サーバー側のコード実行が停止します。したがって、物事を行うためのより良いアプローチではありません。

于 2012-07-21T10:10:14.480 に答える