2011-09-11 11 views
3

私が誤って自分の登録ページを残してからユーザーを停止するため、以下のソリューションを持っている:jQueryの、onBeforeUnloadとASP.Netフォーム

var warning = true; 

function CheckExit() { 
    if (warning) { 
     return "Changes done. Remember to save, blah blah."; 
    } 
} 
window.onbeforeunload = CheckExit; 

addToPostBack = function (func) { 
    var old__doPostBack = __doPostBack; 
    if (typeof __doPostBack != 'function') { 
     __doPostBack = func; 
    } else { 
     __doPostBack = function (t, a) { 
      if (func(t, a)) old__doPostBack(t, a); 
     } 
    } 
}; 

$(document).ready(function() { 

    $('#aspnetForm').submit(function() { 
     warning = false; 
     return true; 
    }); 

    addToPostBack(function (t, a) { 
     warning = false; 
     return true; 
    }); 

}); 

このコードのほとんどはStackOverflowの上ここでは異なる質問からである、とだけで正常に動作私のローカルデバッグページ。警告なしにすべてのASP.Netコントロール(リンクボタン、ボタン)をクリックできますが、ユーザーがウィンドウを閉じるかナビゲートするとすぐに警告が表示されます。

しかし、サーバーに展開すると、ASP.Netコントロールもクリックすると警告が表示されます(実際には、「保存」ボタンをクリックしたときに変更が保存されていないことをユーザーに警告したくありません)。さて、私のローカルデバッグページとサーバーには違いがあります。サーバーはいくつかの広告を含む別のマスターページを使用しますが、Firebug(次の段落を参照)でデバッグした後、どのように違いが見られるのか分かりません。

Firebugを使って、すべてが正しくロードされていることを確認するためにJavascriptコードのさまざまな部分を実行しようとしました(私の最初の推測は、$( '#aspnetForm')を含むセクションがロードされていないということでした。違いはありますが)、全く改善はありません。この警告は、リンクまたはボタンのクリックごとにポップアップします。

私の主な問題は、私がaddToPostBack関数が何をしているのか十分に理解していないと思います。そのため、正しくデバッグできません。

何が間違っているかもしれないと考えている人がいますか?

+0

「警告=偽」にしないでください。クライアントが保存ボタンをクリックしたら? – Naor

+0

多くの法的ボタンがあるので、タブからタブへの切り替え、コンテンツの追加など。「warning = false;」を追加する。これらのすべてには、私が避けたいと思っている多くの作業があります。フォームが編集されると、維持するのは面倒です。 –

+0

@Erlend D私もsmaeの問題を抱えています。どのようにエラーを修正しましたか?助けてください。 – ashishjmeshram

答えて

1

これは推測ですが、 (function($){code here})(jQuery)になる従来の競合防止デバイスはありません。 なので、何かがjQueryの '$'の定義と矛盾している可能性があります。これは、誰かがポストバックしたときにコードが行う例外の実行を停止します。

0

私はJamesに同意します。ほとんどの場合、この種の競合が発生します。私はnoConflict()で提案します。 ハッピーコーディング。

関連する問題