122

3 番目のパラメーター (false) は何を示していますか?

document.addEventListener("deviceready",OnDeviceReady,false);

違いを示すためにスクリプトの例を示すことができますか

4

2 に答える 2

435

これは歴史的な理由によるものです。ブラウザー イベント システムが最初に設計されたとき、その動作をモデル化する方法が 2 つあります。それらは、イベント キャプチャおよびイベント バブリングと呼ばれていました。

たとえば、次の HTML を見てください。

<html>
    <body>
        <a href="#">Content</a>
    </body>
</html>

要素でイベント (クリックなど) が発生した場合a、祖先要素はそれを認識すべきですか? そうすべきだということが広く受け入れられました。しかし問題は、どのような順序で通知するかでした。Microsoft と Netscape の開発者 (これで、私たちが話していることがどれほど歴史的なものかがわかるはずです!) は、異なる意見を持っていました。

1 つのモデルは、イベント キャプチャ (Netscape 開発者が提唱) でした。これは最初に要素に通知htmlし、ツリーを下っていきます。

  • html
  • body
  • a

もう 1 つのモデルは、イベント バブリング (Microsoft 開発者が提唱) でした。これは最初にターゲット要素に通知し、ツリーを上っていきます。

  • a
  • body
  • html

最終的な妥協点は、両方を実行することでした。

  • html(キャプチャフェーズ)
  • body(キャプチャフェーズ)
  • a(キャプチャフェーズ)
  • a(泡立ち期)
  • body(バブリング段階)
  • html(泡立ち期)

そのため、イベントはツリーを下っていき、再び上に戻ります。

これは に到達するための長い道のりですaddEventListeneraddEventListenerキャプチャ フェーズ イベントとバブリング フェーズ イベントの両方をリッスンします。3 番目のパラメーター (useCapture仕様で呼び出されます) により、プログラマーは使用するフェーズを指定できます。

最新のブラウザでは、これはデフォルトでfalse. 特に Internet Explorer がまだサポートしていないため、キャプチャ フェーズを使用したい状況に遭遇することはおそらくないでしょう。ただし、古いブラウザではfalseを明示的に指定する必要があるため、通常は下位互換性のために提供されています。

于 2013-07-10T07:13:01.190 に答える
18

useCaptureです

の場合trueuseCaptureユーザーがキャプチャの開始を希望していることを示します。キャプチャを開始すると、指定されたタイプのすべてのイベントが登録されたにディスパッチされてから、DOM ツリー内のその下にlistenerある にディスパッチされます。EventTargetツリーを上方にバブルするイベントは、キャプチャを使用するように指定されたリスナーをトリガーしません。詳細 な説明については、DOM レベル 3 イベントを参照してください。

于 2013-07-10T07:02:34.100 に答える