javascript - Vad anger den tredje parametern (false) i document.addEventListener("deviceready", OnDeviceReady, false);


Vad indikerar den tredje parametern (false) i

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

Kan någon visa ett exempel på ett skript för att visa skillnaden

Svar #1

Detta är av historiska skäl. När webbläsarens händelsesystem först utformades fanns det två motstridiga sätt att modellera hur det fungerade. De kallades händelsefångst och händelsebubblande.

Ta till exempel detta HTML:

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

Om en händelse (t.ex. ett klick) sker på a-elementet, bör då förfäderna till elementet veta om det? Det var allmänt accepterat att de borde det. Men frågan var i vilken ordning de skulle informeras. Microsoft- och Netscape-utvecklarna (detta borde ge dig en uppfattning om hur historiskt vi talar!) hade skilda åsikter.

En modell var händelsefångst (förespråkad av Netscape-utvecklarna). Detta meddelade html-elementet först och arbetade sig ner genom trädet:

  • html
  • body
  • a

Den andra modellen var händelsebubblande (förespråkad av Microsofts utvecklare). Detta meddelade mål-elementet först och arbetade sig upp genom trädet:

  • a
  • body
  • html

Det slutgiltiga kompromissförslaget var att det skulle göra båda.

  • html (fångstfas)
  • body (fångstfas)
  • a (upptagningsfas)
  • a (bubblande fas)
  • body (bubblingsfas)
  • html (bubblande fas)

Så händelsen arbetar sig ner genom trädet och sedan upp igen.

Detta är ett långrandigt sätt att komma till addEventListener. addEventListener lyssnar på både händelser i fångstfasen och bubblande fasen. Den tredje parametern (kallad useCapture i specifikationen) låter programmeraren ange vilken fas de vill använda.

I moderna webbläsare är detta som standard false. Du kommer troligen aldrig att stöta på ett tillfälle där du vill använda fångstfasen, särskilt eftersom Internet Explorer fortfarande inte stöder den. Men gamla webbläsare behöver att false anges uttryckligen, så det anges generellt för bakåtkompatibilitet.

Svar #2

Det är useCapture:

Om true, indikerar useCapture att användaren vill initiera avlyssning. Efter att ha initierat avlyssning kommer alla händelser av den specificerade typen att skickas till den registrerade listener innan de skickas vidare till några EventTarget som ligger under den i DOM-trädet. Händelser som bubblar uppåt genom trädet kommer inte att utlösa en lyssnare som är avsedd för avlyssning. Se DOM Level 3 Events för en detaljerad förklaring.

Relaterade artiklar