Слушатель событий работает в контексте, но не в другом - код идентичен, ошибок нет.Возможные причины? - PullRequest
0 голосов
/ 06 июля 2019

Я сбит с толку. Я использую виджет select2 на веб-странице, реализованный django-autocomplete-light, и прикрепляю к нему прослушиватель событий следующим образом:

const game_selector = $("#"+id_prefix+"game");
game_selector.on("change", switchGame);

Работает шарм. Я выбираю новую игру в поле выбора, и вызывается функция switchGame.

Это работает на сервере разработки Django с manage.py runserver. И я вижу, как это здорово в отладчике Chrome:

enter image description here

Вот оно, switchGame (событие) - обработчик. И все это тоже работает. Без драмы.

Но я публикую код на своем веб-сервере, и вдруг он не работает. Слушатель событий никогда не срабатывает. switchGame никогда не вызывается.

Он обслуживает один и тот же код, выглядит одинаково в клиенте и в отладчике Chrome. Все хорошо. Я даже вижу, что прослушиватель событий подключен, хотя порядок отличается:

enter image description here

Обслуживаемый сервером разработки, там есть обработчик select2 над switchGame в списке и обслуживаемый с производственного сервера тот же обработчик select2, который указан под обработчиком switchGame.

Может ли порядок иметь значение? И почему порядок будет отличаться?

В конце я смотрю на тот же код привязки, приведенный выше, и могу установить точку останова внутри switchGame, и cI может подтвердить, что django runserver запускает сервер switchGame, когда я выбираю новую игру, но обслуживается с производственного сервера, который она делает. нет.

Подозреваю некоторую проблему с jquery. Я даже изменил привязку слушателя на:

const game_selector = $("#"+id_prefix+"game");
//game_selector.on("change", switchGame);
game_selector.get(0).addEventListener("change", switchGame);

Но поведение такое же. Bamboozles мне, как Javascript может функционировать по-разному в зависимости от контекста сервера? заставляет меня подозревать, что обслуживается другой Javascript, но каждая сделанная мною проверка говорит об этом, так как я могу выполнять редактирование, публикацию и перезагрузку веб-страницы с производственного сервера, а измененный javascript присутствует и отображается в отладчике Chrome.

Интересно, сталкивался ли кто-нибудь с таким странным поведением раньше и может ли он прокомментировать или предложить дальнейшие диагностические указания.

...