0

これが私のコードです:

<script type="text/javascript">
$(document).ready(function () {
    $(window).bind('beforeunload', function () {
        alert("unload");
        if (closeIt())
            $("#<%=Button1.ClientID %>").trigger('click');

    });
    function closeIt() {
        var ans = confirm("save current layout ?");
        if (ans) return true;

    }
});
</script> 
<asp:Button ID="Button1" runat="server" OnClick="btnSaveState_Click" style="display:none;" />

新しい問題は、確認メッセージがFirefoxとChrome以外で2回表示されることです。

4

2 に答える 2

1

beforeunloadハンドラーが実際に行うことになっているのは、文字列を返すことだけであり、ブラウザーはそれを "are-you-sure-you-want-to-leave" ダイアログに表示します。ユーザーが [OK] をクリックすると、発生しようとしていたナビゲーションが発生します。[キャンセル] をクリックしても、クリックされません。詳しくはこちらをご覧ください。

ここで行う通常のことは、confirm次の行に沿って (自分自身を呼び出すのではなく、文字列を返すことによって)メッセージを表示することです。離れる?" 次に、ユーザー自身が[キャンセル] をクリックしてから [保存] をクリックするか、気にしない場合は [OK] をクリックします。

ハンドラーでポストバックを実行しようとしていて、ポストバック自体がアンロードを引き起こすため、問題が発生していると思います。ブラウザーがハンドラーでこの種の動作を意図的に停止したとしても、私は驚かないでしょう。

更新によると、一部のブラウザーのみが動作を許可 beforeunoadします。Firefox のように見えるので、2 つのダイアログが表示されます。自分用のダイアログconfirmと、ブラウザのデフォルトのダイアログです。見た目では、Chrome はそうではないので、イベントが呼び出されることはありません。(または、ポストバックなどの予期しないことが発生した場合、Chrome はイベントを無視するだけかもしれません。)

于 2012-08-23T07:39:45.033 に答える
-1

これを試して:

<asp:Button ID="Button1" runat="server" Text="Button"  CausesValidation="False" onclick="btnSaveState_Click"  onclientclick="return confirm('Are you sure you want to delete?')" />

または、ASP.Net Ajax を見ることができます<ajaxToolkit:ConfirmButtonExtender>

于 2012-08-23T06:44:53.810 に答える