Как передать переменную, объявленную в HTML, стороннему слушателю событий? - PullRequest
0 голосов
/ 01 июля 2019

У меня есть приложение Django, в котором я объявляю переменную внизу тега <body>, и я пытаюсь использовать эту переменную внутри функции прослушивания событий третьей части в моем коде javascript, но она продолжает говоритьпеременная не определена.

Я пытался передать переменную в прослушиватель событий, используя .bind(), но это тоже не работает.Я также пытался получить переменную из window.allJobsiteNames, но она также не была определена.

<!-- index.html -->
<body>
  <script type="text/javascript" src="{% static 'js/autoComplete.js' %}"></script>
  <script type="text/javascript" src="{% static 'js/siren_search.js' %}"></script>
  <script type="text/javascript">
      var allJobsiteNames = "{{ all_jobsite_names|safe }}".replace(/'/g, '"');
  </script>
</body>
// siren_search.js

$(document).ready(function () {

  console.log(allJobsiteNames) // ==> prints correctly

  // Add an event listener to the searchbar
  document.querySelector("#searchbar").addEventListener("autoComplete", function (event) {
    console.log(event.detail);
  }.bind(allJobsiteNames));

  // User presses enter on the search bar
  $('#searchbar').on('keypress', function (event) {
    addSearchSpinner(event);
  });

});

// source code: https://github.com/TarekRaafat/autoComplete.js
new autoComplete({
  data: {                              
    src: allJobsiteNames, // allJobsiteNames is not defined
  },

  // some code
});

Точная ошибка, которую я получаю:

Uncaught ReferenceError: allJobsiteNamesне определен в siren_search.js: 261 (анонимный) @ siren_search.js: 261

1 Ответ

0 голосов
/ 01 июля 2019

Проверьте порядок выполнения вашего JavaScript.

Во время выполнения файла siren_search.js allJobsiteNames еще не определено.

Измените порядок ваших скриптов

<!-- index.html -->
<body>
  <script type="text/javascript">
      var allJobsiteNames = "{{ all_jobsite_names|safe }}".replace(/'/g, '"');
  </script>
  <script type="text/javascript" src="{% static 'js/autoComplete.js' %}"></script>
  <script type="text/javascript" src="{% static 'js/siren_search.js' %}"></script>
</body>

Часть $(document).ready(function () { ... }); ожидает завершения загрузки страницы, поэтому выполняется после асинхронного определения allJobsiteNames.

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