javascript 이벤트 flow_javascript 스킬의 버그에 대한 자세한 설명

WBOY
풀어 주다: 2016-05-16 17:22:22
원래의
938명이 탐색했습니다.

최근 netsurf를 튜닝할 때 관련 버그에 직면했습니다. 경고()가 두 번 호출되었습니다. 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->단계 = DOM_BUBBLING_PHASE;

for (targetnr = 0; targetnr

이벤트 흐름은 다음과 같습니다: p1(root)-->p2-->... --> pm --> T(캡처 단계), T(대상 단계), T-- > 오후 --> ... --> p1(버블링 단계).

스펙에는 캡쳐링과 버블링 중 하나만 선택할 수 있다고 명시되어 있습니다. 코드에서는 js_dom_event_add_listener()에서 캡쳐링을 선택합니다. 이는 경고가 두 번 실행되는 이유를 설명합니다.

수정: DOM 3 사양에 따라 위의 0을 1로 변경하면 됩니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!