Потенциальное состояние гонки jQuery Listener - может быть, Chrome Dev Tools - PullRequest
0 голосов
/ 06 декабря 2018

Прошу прощения, это может быть длиннее, чем ожидалось ...

Примечание: все слушатели делегированы в "тело" и все инициированные события также находятся в "теле".

Намеченный поток загрузки на странице

  1. Создать селектор с идентификатором # selectorA
  2. Зарегистрировать прослушиватель для измененного значения #selectA (listener1), который срабатывает ("aChanged")
  3. Если условие X, зарегистрируйте прослушиватель для aChanged, который перезагружает родительскую страницу (listener2)
  4. Зарегистрируйте прослушиватель для aChanged, который применяет изменения CSS к #selectorA (listener3)

Предполагаемый поток при изменении

  1. Обновления пользователя #selectA value -> $ .trigger ("aChanged")
  2. listener1 слышит aChanged -> Если условие, то перезагрузить всю страницу
  3. listener2 слышит aChanged -> $ .load () div на странице
  4. listener3 слышит aChanged -> обновить некоторые классы css элемента #selectA (не элементы), только их css)

Мое намерение состоит в том, что если он-чанШаг 2 e-flow перезагружает всю страницу, другие слушатели могут делать все, что они захотят - или потерпеть неудачу, мне все равно, потому что страница перезагружается в любом случае.Я предполагаю, что если страница перезагружается, другие слушатели не могут повлиять на div / CSS загружаемой / недавно загруженной страницы.

Моя проблема

Иногда, но непоследовательно редко, при переключении #selectA между двумя или более параметрами, которые удовлетворяют условию X (условие перезагрузки страницы), слушатели прекращают прослушивание - или событие aChanged не вызывается.

При входе вконсоль Я заметил, что каждый раз, когда слушатели собираются потерпеть неудачу (когда они зарегистрированы, прежде чем ничего не слышат), что меняется порядок loadPage - registerAllListeners, и вместо журналов консоли, приходящих со страницы индекса, они приходят из VMxyzидентификатор (инструмент разработчика chrome «этот скрипт не связан с URL»).Если произойдет сбой, большинство журналов консоли «регистрирующий прослушиватель» поступают до журнала chrome «Navigated to https: // ...» - все эти журналы поступают из идентификатора VMxyz.

Мой вопрос (ы)

  1. Я вроде понимаю идентификатор VMxyz инструментов разработчика Chrome, но я мог бы использовать справку, чтобы понять, почему - иногда - эти операторы console.log () берутся изфактическая страница и почему они иногда приходят из VMxyz.
  2. Я не могу понять, почему слушатели иногда перестали работать.Мне кажется, что даже если бы страница действительно перезагружала действие среднего слушателя, страница все равно просто создала бы новых слушателей.
  3. Если у кого-то есть рекомендации о том, как я мог бы далее отладить это или полностью исправить это (пожалуйста) Буду признателен.
...