Что мне не хватает в jQuery триггере и event.data? - PullRequest
0 голосов
/ 08 января 2020

Я не могу заставить jQuery .trigger отправлять данные, доступные через event.data в моем обработчике кликов.

Интересно, насколько я понимаю, как эти наборы функций предназначены для работы?

Вот мой JS:

$(document).ready(function() {

    $("#bb").click(function(event){
      console.log(event.data);
    });

$("#bb").trigger("click", {key: "val"});

});

А вот мой HTML :

<button id="bb" value="click me">click me</button>

Как видите, все довольно просто. То, что я ожидаю увидеть в консоли, это {key: "val"}, но то, что я вижу, это null.

Вот кодовая ручка для вашей утилиты. https://codepen.io/crowns/pen/ZEYxEEO?editors=1111


У меня есть путаница в документации jQuery по триггеру. Это

Обратите внимание на разницу между дополнительными параметрами, передаваемыми здесь, и параметром eventData для метода .on (). Оба являются механизмами для передачи информации в обработчик событий, но аргумент extraParameters для .trigger () позволяет определять информацию во время запуска события, в то время как аргумент eventData для .on () требует, чтобы информация уже вычислялась в время, когда обработчик привязан.

Как получить доступ к данным, передаваемым для запуска с помощью аргумента extraParameters?

И доступна ли EventData через on через Event.data? Чтобы ответить на мой собственный вопрос, да, основываясь на прочтении документации для on ().

1 Ответ

0 голосов
/ 08 января 2020

Первый передаваемый параметр всегда event, второй - data, который вы отправляете - вы не можете использовать .trigger() для изменения event.data

$(document).ready(function() {
  $("#bb").on('click', function(event, data) {
    console.log(event.data);
    console.log(data);
  });

  $("#bb").trigger('click', {key: 'value'});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button id="bb" value="click me">click me</button>
...