5

テキストボックスに何かを入力した場合、ブラウザのリフレッシュまたは戻るボタンを押したときにユーザーに警告したい。だから私はそれを行うwindow.onbeforeunload関数を使用しています。window.onbeforeunloadが部分的なポストバックイベントのためにIEで起動する

window.onbeforeunload = function() { 
    if (if user hasn't entered any thing) { 
     return; 
    } 
    return 'Entered data will be lost.'; 
}; 

このjavascriptコードは、FirefoxとChromeでうまく機能します。しかしIEでは、この関数は部分的なポストバックを持つボタンに対して起動します。 IEでこの問題を解決するための解決策はありますか? 感謝:)

  • それはIE
  • 正しくIEで実行されていない

答えて

5

window.onbeforeunload機能にバグのために起こるのです。一部の部分的なポストバックは「ページを終了しようとしている」とも考えられます。 ページ上のリンクにhref = "javascript:...."(ASP.Net LinkBut​​tonがこのようにレンダリングされている)がある場合、リンクがクリックされると、IEはウィンドウアンロードイベントを誤って起動します。 ので、私はdirtyflag変数を保持し、リンクはHREF^=「javascript:」形式の使用を開始するために、ページがロードされたときに、今

var __ignoreDirtyFlag = false; 

$(document).ready(function() { 
    if ($.browser.msie) { 
     $('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function() { 
      __ignoreDirtyFlag = true; 
     }); 
    } 
}); 

を追加し、その関数が割り当てられます。リンクをクリックすると、__ ingoreDirtyFlag変数がtrueになります。あなたがあなたのページで使用しているすべてのASP更新パネルがある場合 は、その後

window.onbeforeunload = function globalWindowUnload() { 
    if (!__ignoreDirtyFlag && isDataFilled == true) { 
     return "You have unsaved changes on this page. If you leave this page, those changes will be lost."; 
    } 
    __ignoreDirtyFlag = false; 
    return; 
}; 

を追加し、リンクに結合する上記の機能が削除されます。 したがって、更新パネルが更新されるときに関数をリンクに再度バインドする必要があります。本体タグのonload方法の

ので、

function foo() { 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 
} 

function endRequestHandler(sender, args) { 
    // Do your stuff 
    if ($.browser.msie) { 
     $('[href^="javascript:"]').bind('click.ignoreDirtyFlag', function() { 
      __ignoreDirtyFlag = true; 
     }); 
    } 
} 

、IはFOO()メソッドをassinged。このハックはIEで正常に動作され <body onload="foo()">

すべてのブラウザ:) おかげ

+0

を変更することです。それは読みにくいです。 –

+1

* jquery *タグが表示されません –

+0

この回答はほぼ3歳ですが、質問がjqueryとしてタグ付けされていないため、回答が非jqueryバージョンを追加できると思いますか? –

0

`VARのinFormOrLink =偽; var url_auth = ''; var __ignoreDirtyFlag = false;

document).ready(function() { 

if ($.browser.msie) { 
    $('').bind('click.ignoreDirtyFlag', function() { __ignoreDirtyFlag = true; alert("teste luiz") }); 

    window.onbeforeunload = function() { 
     if (!__ignoreDirtyFlag) { 
      return "Tem certeza que deseja encerrar a sessão TESTE LUIZ?"; 
     } 
     __ignoreDirtyFlag = false; 
     return; 
    }; 
} 
else { 
    $('*').live('click', function() { inFormOrLink = true; alert("Passou aqui 1 LUIZ"); }); 
    $('*').bind('submit', function() { inFormOrLink = true; alert("Passou aqui 2"); }); 
    window.onbeforeunload = function() { 
     if (!inFormOrLink) { 

      if (window.location.href.indexOf("DEV2") != -1) { 
       $.post("/DEV2/SSQ/AUTH/LOGOUT", null); 
       return 'Tem certeza que deseja encerrar a sessão TESTE DEV2?'; 
      }` 
+1

ほとんどの回答については、コードの仕組みを示すために説明を追加することをお勧めします。これは、プログラミングの経験が少ない他の人々がコードの内容を理解するのに役立ちます。 –

+0

ブラウザを閉じたり、目的のURLを手動で変更するたびに、ユーザをログアウトさせることが目的です。 –

0

目的は、この答えは技術的に興味深いです、彼は、ブラウザを閉じたときにユーザーをログアウトするか、手動で先URL

var url_auth = '';var __ignoreDirtyFlag = false;$(document).ready(function() {if ($.browser.msie) {$('a').live('click', function() { __ignoreDirtyFlag = true;}); $('*').bind('submit', function() { __ignoreDirtyFlag = true; });window.onbeforeunload = function() {if (!__ignoreDirtyFlag) {if (window.location.href.indexOf("DEV2") != -1) {$.post("/DEV2/SSQ/AUTH/LOGOUT", null);return 'Tem certeza que deseja encerrar a sessão ?';}}}; 
関連する問題