Skip to content

removeEventListener does not work because raw function is not passed #23921

@hamidb80

Description

@hamidb80

Description

import std/[dom]

proc onkeydownEventHandler(e: Event) =
  echo "hey"

window.addEventListener    "keydown", onkeydownEventHandler
window.removeEventListener "keydown", onkeydownEventHandler
<script src="./play.js"></script>

Nim Version

Nim Compiler Version 2.1.9 [Windows: amd64]
Compiled at 2024-07-30
Copyright (c) 2006-2024 by Andreas Rumpf

active boot switches: -d:release

Current Output

`hey` is printed after every key press

Expected Output

it should not not log anything when pressing keys

Possible Solution

here's the produced code when -d:danger:

Temporary1 = onkeydownEventHandler__play_u2.bind(null); Temporary1.ClP_0 = onkeydownEventHandler__play_u2; Temporary1.ClE_0 = null;
window.addEventListener("keydown", Temporary1, false);
Temporary2 = onkeydownEventHandler__play_u2.bind(null); Temporary2.ClP_0 = onkeydownEventHandler__play_u2; Temporary2.ClE_0 = null;
window.removeEventListener("keydown", Temporary2);

it would work simply if the following code would be generated:

window.addEventListener("keydown", onkeydownEventHandler__play_u2, false);
window.removeEventListener("keydown", onkeydownEventHandler__play_u2);

perhaps it is good to allow addr someFunction in js backend for workaround. i.e. the following code should produce the above code:

window.addEventListener    "keydown", addr onkeydownEventHandler
window.removeEventListener "keydown", addr onkeydownEventHandler

Additional Information

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions