2011-09-20 25 views
7

jQuery(1.6.x)に奇妙な問題があります。私が見つけたとして、jQueryのwindow.onbeforeunloadの内容が上書きされるため、jQueryがwindow.onbeforeunloadを上書きすることがあるのはなぜですか?

window.onbeforeunload = function() { return 'Are you sure ?'; }; 

しかし、それは動作しません:私は私のページでこのシンプルなコールを持っています。

function(e) { 
// Discard the second event of a jQuery.event.trigger() and 
// when an event is called after a page has unloaded 
return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? 
    jQuery.event.handle.apply(eventHandle.elem, arguments) : undefined; 
}; 

は、なぜ、どこでjQueryの私のonbeforeunload関数を上書きし、私が見つけることができる方法はある:JSコンソールで、私はwindow.onbeforeunloadは、jQueryのコードの一部が含まれていることを見ることができますか? jQueryをロードしてonbeforeunload関数を使って空のjsfiddleを実行しようとすると、期待どおりに動作します。

ご了承ください。前もって感謝します。

EDIT:

念のために、誰かが使用することを提案している:

$(window).bind('beforeunload', function() { return 'Are you sure';}); 

私はすでにそれを試みた、それは純粋なJavaScriptを使用するのと同じように動作します。

+0

代わりにjQuery 'unload'メソッドを使用できますか? http://api.jquery.com/unload/ –

+0

私は自分の関数を 'onbeforeunload'にうまく適用することができ、jQuery 1.6を使用しています。提供できる情報やコードはありますか?これはすべてのブラウザで機能しませんか? http://jsfiddle.net/Kai/QgVE8/ – Kai

+0

あなたは宇宙で叫んでいます。この問題を再現したテストケースを提供してください。 – mekwall

答えて

4

私は最終的に問題の正確な原因がわからないため、おそらく最もクリーンではない解決策を見つけましたが、機能します。 beforeunload関数をjQueryのロード関数に入れて、DOMや他の要素がロードされた後に実行するようにしました。

$(window).load(function() { 
    $(window).bind('beforeunload', function() { return 'Are you sure ?';}); 
}); 
+0

この$(ウィンドウ).bind( 'beforeunload'、function(){return '本当ですか?';});ちょうど私のためにうまくいった –

0

あなたはsetTimeout(function(){ ... },0)をしようと、いくつかの運を持っているかもしれませんが、私は同じ問題に遭遇した、これは実行可能な解決策として働いていました。

関連する問題