0

私は次のコードを使用しています(純粋にテスト目的で):

$(window).bind('unload', function() {alert('unload!')});
$(window).unload(function () {alert(".unload()")});

2 つの質問があります。

  1. なぜ機能するのですか?つまり、2 つのメッセージが表示されるのはなぜですか? 2 つのイベント リスナーを同じ DOM オブジェクトにアタッチしても効果がないことをどこかで読みました。2 番目以降のリスナーは無視されます。

  2. なぜ Firefox は両方のメッセージを標準的なシステムのようなメッセージ ボックスに表示するのに、ページの使用中に発生する他のすべてのメッセージ (アラートも含む) は常にこの見苦しいタイトルのない迷惑なメッセージ ボックスに表示されるのですか?みたいなこと?

  3. この質問へのコメントで書いたようにalert()、 (Chrome / WebKitによる)ブロックunloadは良い考えですか?ページを更新したり、別のページに移動した直後に、コンソール (少なくとも Chrome では) がクリアされるため、アラートを console.log (そこで提案されているように) に置き換えても、あまり有用な効果は得られません。メッセージが実際に消える数ミリ秒前にコンソールに書き込まれたメッセージの痕跡を見ることができるので、むしろ役に立たないと思います。アンロードでアラートを無効にすることは最善の考えではありません。いくつかの深刻なテストを行うのは難しく、「ひどい」ページは、アラート (jQuery UI、一部の div など) を使用せずに独自の「迷惑な」メッセージを表示することで簡単に回避できます。

これらの質問は、すべての答えを知りたいという私の空腹を満たすためのものです。:] だから、それを真剣に扱わないでください (いくつかの追加のテスト、フィドルの例などを行うなど)。ただ、これについてあなたが知っていること、または感じていることを書いてください。

4

2 に答える 2

1

(jQuery を使用して) 同じイベントに複数のイベント ハンドラーをバインドすると、確実に両方が起動されます。「onfoo」要素属性への連続した割り当てについて考えているかもしれませんが、それは jQuery (または私が知っている他の最新のフレームワーク) が内部的に使用するメカニズムではありません。

ブラウザはalert()メッセージを好きなように表示します。ページ上のコードの制御下にはありません。

最後に、alert()「アンロード」イベント ハンドラを許可しないことは、ユーザーにとって良い考えです。ページの読み込み時にデバッグ コンソールをクリアするかどうかを制御できます。

于 2012-07-17T14:38:26.447 に答える
1

(少なくともChromeでは)ページを更新した直後、または別のページに移動した直後にクリアされています

コンソールを保持するようにデバッガーをセットアップしてください! 毎日使用するツールの機能について学びます。

  • Chrome - コンソール タブで右クリックし、コンテキスト メニューのオプション
  • Firebug - コンソールのボタン
于 2012-07-17T15:00:39.057 に答える