JavaScript: как передать аргументы в функцию слушателя, которая в конечном итоге будет удалена - PullRequest
1 голос
/ 25 июня 2019

Я пытаюсь вызвать функцию, параметры которой зависят от того, когда событие инициировано.Эта функция, однако, не должна быть анонимной, потому что слушатель будет удален в будущем.

Я попытался использовать выражение функции для обертки и передать ссылку на this в качестве параметра в основной функции:

<div id="div">
  click
</div>
function main() {
  let foo = "foo";
  let bar = "bar";
  let wrapFunction = function(event) {
    goodFunction(event, foo, bar, this);
  }
  document.getElementById("div").addEventListener("click", wrapFunction);
}
function goodFunction(e, foo, bar, wrapFunction) {
  alert(foo);
  alert(bar);
  document.getElementById("div").removeEventListener("click", wrapFunction);
}
main();

Все работает нормально, кромелиния document.getElementById("div").removeEventListener("click", wrapFunction);.Это часть, которую я не могу понять, и помощь будет принята.

1 Ответ

2 голосов
/ 25 июня 2019

Вместо передачи this на goodFunction(event, foo, bar, this) вызов внутри wrapFunction, вы можете просто передать wrapFunction сам, увидев, что он определяется к моменту вызова обработчика:

function main() {
  let foo = "foo";
  let bar = "bar";
  let wrapFunction = function(event) {

    /* wrapFunction is defined so pass it directly to goodFunction */
    goodFunction(event, foo, bar, wrapFunction);
  }
  document.getElementById("div").addEventListener("click", wrapFunction);
}

function goodFunction(e, foo, bar, wrapFunction) {
  alert(foo);
  alert(bar);
  document.getElementById("div").removeEventListener("click", wrapFunction);
}
main();
<div id="div">Click me</div>
...