ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptイベントflow_javascriptスキルのバグの詳細説明

JavaScriptイベントflow_javascriptスキルのバグの詳細説明

WBOY
WBOYオリジナル
2016-05-16 17:22:22996ブラウズ

最近、netsurf のチューニング時に関連するバグに遭遇しました。alert() が 2 回呼び出されました。 html コード:

コードをコピー コードは次のとおりです:


クリック時のアラートの例




段落の最初の行。
< /p>


<script><br>var Button1 = document.getElementById("button1");<br>/*var Button1Click = function() {alert(1) }; ", Button1Click, false);*/<br>Button1.onclick = Causealert;<br> </p></script>



gdb を通じて、_dom_node_dispatch_event() で問題を見つけます:

コードをコピー コードは次のとおりです:
/* キャプチャ フェーズ */ for (targetnr = ntargets; targetnr > 0; --targetnr)。 ..
/* バブリングフェーズ */

evt->phase = DOM_BUBBLING_PHASE;

for (targetnr = 0; targetnr

イベント フローは次のとおりです: p1(ルート)-->p2-->... -->pm -->T (キャプチャ フェーズ)、T (ターゲット フェーズ) > pm --> ... --> p1 (バブリングフェーズ)。

仕様ではキャプチャーとバブリングのどちらか一方のみを選択できると規定されており、コードではjs_dom_event_add_listener()でキャプチャーを選択しています。これは、アラートが 2 回実行される理由を説明します。

修正: DOM 3 仕様に従って、上記の 0 を 1 に変更するだけです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。