перемещение JavaScript в папку активов - PullRequest
0 голосов
/ 10 марта 2019

я пытаюсь переместить мой javascipt со страницы просмотра, где он работает, в файл assets / javascripts. Однако, когда я делаю движение, JavaScript больше не выполняется. Я не уверен, почему?

$('.dropbtn').click(function(){
    if($(this).hasClass("active") ) {
      $(this).parent(".dropdown").find('.dropdown-content').removeClass('show');
      $(this).removeClass('active');
    }
  else{
  $('.dropdown-content').removeClass('show');
  $(this).parent(".dropdown").find('.dropdown-content').addClass('show');
  $(this).addClass('active');
    }
});

1 Ответ

2 голосов
/ 10 марта 2019

Если ваш файл Javascript включен в конвейер ресурсов, он будет объединен, уменьшен и предварительно обработан в один большой файл .js, который по умолчанию включен в <head> вашего макета.К тому времени, когда браузер читает этот файл, элемент dom, связанный с классом .dropbtn, еще не загружен, поэтому прослушиватель событий click никогда не добавляется.

Решение будет заключаться в переносе вашегокод внутри функции, которая вызывается после загрузки документа:

$(document).ready(function(){
  // your code goes here.
});

Однако, если вы используете турболинки (которые по умолчанию включены в рельсы), вам необходимо использовать:

$(document).on('turbolinks:load', function(){
  // your code goes here.
});

Причина этого заключается в том, что после загрузки документа турболинки будут обновлять его, а не перезагружать после каждого запроса, поэтому $(document).ready() будет срабатывать только один раз, тогда как 'turbolinks:load' будет срабатывать каждый раз, когда содержимое загружается в ваши ссылки.приложение.

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