JQuery прослушиватели событий зарегистрированы в динамически загруженном контенте, содержащем теги <script>с ошибками? - PullRequest
0 голосов
/ 28 января 2020

Хорошо, это загадочное название. Давайте попробуем разбить его на части.

У меня есть прослушиватель событий в $ (document) .ready, прослушивающий тело для изменения раскрывающегося списка и вызывающий функцию при изменении. Функция обновления делает вызов AJAX, который изменяет переменные на стороне сервера, вызывая других слушателей (которые изменяют страницу с помощью JS location.href=... и в конечном итоге перезагрузят исходную страницу после установки большего количества серверных переменных).

Прослушиватель событий: $('body').on('change', '#dropdown', updateFunction);

Этот прослушиватель событий находится в теге <script> содержимого HTML, который динамически загружается на страницу «index».

Первый раз страница индекса загружается и используется выпадающий список, когда прослушиватель событий безупречно вызывает функцию update, выполняя свои действия c, перезагружая страницу и снова регистрируя прослушиватель. Последующее использование выпадающего меню иногда (очень редко / непоследовательно) делает волшебные c, перезагружает страницу, но НЕ регистрирует слушателя снова ... Использование Chrome для проверки прослушивателей событий подтверждает, что он не существует, но просмотр исходного кода подтверждает, что код идентичен после успешной загрузки и последующей неудачной перезагрузки.

При добавлении некоторых операторов console.log() вокруг регистрации слушателя я заметил, что если оператор журнала пришел со страницы индекса, слушатель был правильно зарегистрирован. Когда тот же оператор журнала пришел с одной из страниц Chrome VMxxxx, слушатель не был зарегистрирован и страница не функционировала.

В моих попытках решить эту проблему я обнаружил следующую цитату:

Когда вы загружаете контент HTML через AJAX, и этот контент содержит теги, сценарий будет оцениваться с использованием eval () и распознаваться представлением Chrome Sources как новый файл, начинающийся с ' VM. { ссылка }

Это заставляет меня задаться вопросом, зарегистрирован ли прослушиватель событий JQuery, зарегистрированный в динамически загружаемом контенте, содержащем тег, зарегистрированный в Chrome Консоль, поставляемая VMxxxx, ненадежна или содержит ошибки.

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

ОБНОВЛЕНИЕ По запросу я постараюсь добавить пример того, что я делаю. Мне жаль, что это не поможет. «Гипотеза» - это то, о чем я прошу, и поскольку никто не сразу сказал: «О да, это глючит», у меня возникает ощущение, что это не глючит.

Я работаю над сайтом ColdFusion, где каждая страница построены из кусочков различных файлов в зависимости от десятков условий. Большинство страниц представляют собой «указатель», содержащий «selectionBar» (раскрывающихся элементов), div с содержимым stati c и серию div с содержимым динамического c (иногда вставляется сервером, иногда вставляется после * 1068) * call return).

Страница примерно такая:

index.cfm // "главная" страница, которая включает layout.cfm стандартных библиотек HTML и JS, еще один .cfm для _permissionCheck, другой .cfm для _selectionBar, div, содержащий другой .cfm _mainContent, и тег прослушивания для «cChanged», который перезагружает div _mainContent, и (если условие истинно) перезагружает всю страницу индекса.

<cfinclude _selectionBar.cfm> // Готовит 0-3 выпадающих элемента, каждый из которых является пользовательским элементом cf_tag, у которого есть тег, запускающий «xLoaded» при загрузке его содержимого, «xChanged» при изменении выбранного параметра, и прослушивание «xLoaded» предыдущего элемента, который указывает на необходимость перезагрузки. Первое срабатывание «aChanged» при изменении, которое перезагружает второе, которое запускает «bLoaded» при завершении загрузки (которое вызывает перезагрузку третьего) и «bChanged» при изменении, которое (также) перезагружает третье, которое запускает «cLoaded» по завершении загрузка и "cChanged", когда это изменилось. Именно этот cLoaded перезагружает _mainContent и всю страницу. (не всегда работает должным образом)

<cfinclude _mainContent> // Включает несколько других файлов .cfm и один файл main.cfm (за один раз). Файл main.cfm, представляющий своего рода мастера, проводящий вас через 1-4 «шага», отображающий следующий шаг, когда вы нажимаете кнопку «Далее» (которая передает форму текущего шага, перезагружает index.cfm и отображает следующий форма шага). Каждый шаг - это другая страница .cfm со своими собственными тегами и тегами, а также связанными JS файлами.

Надеюсь, что это сделает грязь немного более понятной.

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