Передача дополнительных аргументов в функцию обратного вызова события - PullRequest
2 голосов
/ 19 марта 2019

Мне нужно передать дополнительные аргументы функции для события.

Я пытался bind, но он передает только e, а не результат data:

locationSearch.on("result", dropMarker.bind(this, e) );

Я мог бы сделать:

locationSearch.on("result", function(data) {
    dropMarker({ 
        e: e,
        data: data
    });
};

... но тогда я не могу отключить слушателя locationSearch.off(...), так как это анонимная функция.

Ответы [ 2 ]

1 голос
/ 19 марта 2019

Просто оберните вызов функции в другую функцию, которая станет обратным вызовом

locationSearch.on("result", wrapper);

function wrapper(e) { dropMarker(e, data); }

Вот пример:

$("button").on("click", wrapper);

let data = "some data";

function wrapper(e){
  // The wrapper just calls the actual handler
  handler(e, data);
}

function handler(e, data){
  // Because the wrapper was named, it can be disconnected
  $(e.target).off("click", wrapper);
  
  // And you can do whatever you need to
  console.log(e.type, data);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button>Click Me</button>
0 голосов
/ 19 марта 2019

Просто назовите функцию и затем вызовите ее:

function handler(e) {
    dropMarker({ e: e, data: data });
}

locationSearch.on("result", handler);
...