Все слушатели событий JavaScript, указывающие на один файл jQuery?[WordPress] - PullRequest
0 голосов
/ 04 декабря 2018

Все прослушиватели событий JavaScript на сайте WordPress указывают на один и тот же фрагмент кода в файле 'jquery.min.js':

function(a) {
  return "undefined" == typeof n || a && n.event.triggered === a.type ? void 0 : n.event.dispatch.apply(k.elem, arguments)
}

У меня есть другие файлы JavaScript с прослушивателями событий.Тем не менее, Chrome, ни Firefox показывает их больше?Что могло вызвать это?

1 Ответ

0 голосов
/ 04 декабря 2018

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

После некоторых исследований я обнаружил структуры данных для таблиц диспетчеризации событий jQuery в Как найти прослушиватели событий на DOM-узле при отладке или из кода JavaScript? .

Для инструментов разработчика браузера отображать прослушиватели событий, добавленные jQuery вместо напрямую присоединенной функции диспетчеризации jQueryон должен найти и понять эти таблицы отправки событий jQuery.Если он не может найти или понять эти таблицы диспетчеризации событий jQuery, вероятно, инструменты разработчика браузера просто сдаются и показывают обработчик диспетчеризации jQuery в качестве обычного прослушивателя событий DOM вместо записей в таблице диспетчеризации событий.

Вы можетесоздайте дамп записи таблицы отправки событий первого клика для элемента, выполнив консольную команду:

jQuery(this).data('events').click[0]

В моем браузере для jQuery v1.12.4 это показывает:

data: undefined
​
guid: 202
​
handler: function submitButtons()
​
namespace: "edit-post"
​
needsContext: undefined
​
origType: "click"
​
selector: undefined
​
type: "click"
​
<prototype>: Object { … }

Можете ли вы попробовать этодля элемента с обработчиком события click в вашем браузере, установив точку останова в коде прослушивателя события click для этого элемента и выполнив приведенную выше команду в консоли.Я предполагаю, что структура таблицы диспетчеризации событий отличается, и инструменты разработчика браузера либо не могут найти таблицу диспетчеризации событий jQuery, либо не могут понять структуру таблицы диспетчеризации событий.jQuery иногда изменял эту структуру данных, когда выпускал новую версию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...