Skip to content

Changing the DOM hierarchy while handling a "pointerenter" event produces significantly different results across browsers #285

Open
@graouts

Description

@graouts

Consider this example (which GitHub wouldn't let me attach):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Changing the DOM hierarchy while handling a pointerenter event</title>
    <style>

div {
    position: absolute;
    top: 0;
    left: 0;
    width: 100px;
    height: 100px;
    background-color: black;
}

    </style>
    <script>

function logEvent(event)
{
    console.log(`${event.type}@${event.target.id}`);

    if (event.type == "pointerenter" && event.target.id === "top")
        event.target.innerText = "";
}

document.addEventListener("DOMContentLoaded", event => {
    for (let div of document.querySelectorAll("div")) {
        for (let eventType of ["mouseenter", "pointerenter", "mouseleave", "pointerleave"])
            div.addEventListener(eventType, logEvent);
    }
});

    </script>
</head>
<body>
<div id="top"><div id="middle"><div id="bottom"></div></div></div>  
</body>
</html>

If you move your mouse pointer over the black rectangle, which produces a "pointerevent" event that removes all of its content, the different browsers I've tested dispatch all different events.

Should the Pointer Events and/or UI Events specifications discuss what should happen in this situation?

Safari (ToT build)

  1. pointerenter@top
  2. mouseenter@top
  3. pointerenter@middle
  4. mouseenter@middle
  5. pointerenter@bottom
  6. mouseenter@bottom
  7. pointerleave@bottom
  8. mouseleave@bottom
  9. pointerleave@middle
  10. mouseleave@middle
  11. pointerenter@top
  12. mouseenter@top

Firefox (67.0.1)

  1. pointerenter@top
  2. pointerenter@middle
  3. pointerenter@bottom
  4. mouseenter@top
  5. pointerleave@bottom
  6. pointerleave@middle
  7. pointerenter@top

Chrome (74.0.3729.169)

  1. pointerenter@top
  2. pointerenter@middle
  3. pointerenter@bottom
  4. pointerenter@top
  5. mouseenter@top

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions