Heim Web-Frontend js-Tutorial 关于javascript event flow 的一个bug详解_javascript技巧

关于javascript event flow 的一个bug详解_javascript技巧

May 16, 2016 pm 05:22 PM
bug event flow

我最近调netsurf也遇到一个相关的bug : alert() 被调了两次。html 代码:

复制代码 代码如下:



alert onclick example

function causealert()
{
var txt = document.getElementById("p1").textContent;
alert(txt);
}




First line of paragraph.



<script><BR>var Button1 = document.getElementById("button1");<BR>/*var Button1Click = function() { alert(1); }; <BR>Button1.addEventListener("click", Button1Click, false);*/<BR>Button1.onclick = causealert;</script>




     通过gdb, 定位到是_dom_node_dispatch_event()里面的问题:
复制代码 代码如下:

   /* The capture phase */ for (targetnr = ntargets; targetnr > 0; --targetnr)...

/* Bubbling phase */
 evt->phase = DOM_BUBBLING_PHASE;

 for (targetnr = 0; targetnr


 

事件流是这样的: p1(root)-->p2-->... --> pm --> T  (capturing phase), T (target phase), T--> pm --> ... --> p1 (bubbling phase).

规范规定capturing 和bubbling 只能选其一, 代码中在 js_dom_event_add_listener()是选capturing。因此就解释了为什么alert 被执行两回了。

修改: 根据DOM 3 规范,把上面的0改成1就行了。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Logitech Flow läuft nicht unter Windows 11 Logitech Flow läuft nicht unter Windows 11 Feb 19, 2024 pm 10:39 PM

Logitech Flow läuft nicht unter Windows 11

Was bedeutet Spielfehler? Was bedeutet Spielfehler? Feb 18, 2024 am 11:30 AM

Was bedeutet Spielfehler?

Zusammenfassung der Apple iOS18-Fehler Zusammenfassung der Apple iOS18-Fehler Jun 14, 2024 pm 01:48 PM

Zusammenfassung der Apple iOS18-Fehler

Ereignisverarbeitungsbibliothek in PHP8.0: Ereignis Ereignisverarbeitungsbibliothek in PHP8.0: Ereignis May 14, 2023 pm 05:40 PM

Ereignisverarbeitungsbibliothek in PHP8.0: Ereignis

Was bedeutet Systemgepäck? Was bedeutet Systemgepäck? Nov 09, 2022 pm 02:40 PM

Was bedeutet Systemgepäck?

Beheben Sie das Problem mit der Samsung-Datenverbindung Beheben Sie das Problem mit der Samsung-Datenverbindung Mar 01, 2024 pm 02:00 PM

Beheben Sie das Problem mit der Samsung-Datenverbindung

Beheben von Win11-Fehlern und -Problemen Beheben von Win11-Fehlern und -Problemen Jan 13, 2024 pm 08:21 PM

Beheben von Win11-Fehlern und -Problemen

Steam Summer Sale – Valve verspricht 95 % Rabatt auf AAA-Spiele und bestätigt Rabatte für die viralen Spiele Palworld und Content Warning Steam Summer Sale – Valve verspricht 95 % Rabatt auf AAA-Spiele und bestätigt Rabatte für die viralen Spiele Palworld und Content Warning Jun 26, 2024 pm 03:40 PM

Steam Summer Sale – Valve verspricht 95 % Rabatt auf AAA-Spiele und bestätigt Rabatte für die viralen Spiele Palworld und Content Warning

See all articles