Рельсы в JavaScript работает только после перезагрузки

Проблема-это именно то, что заголовок говорит. JavaScript находится в трубопроводе актив.е активы/скрипты/мой_файл.Яш.кофе в application.js у меня есть:

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require jquery.ui.all
//= requier twitter/bootstrap
//= require jasny-bootstrap
//= require_tree .

Это в CoffeeScript

$(document).ready ->
  $("#close").click ->
    $(this).parent().parent().slideUp("slow")

  $( "#datepicker" ).datepicker
    dateFormat : "yy-mm-dd"

  player_count = $("#player option").length

  $('#btn-add').click ->
    $('#users option:selected').each ->
      if player_count >= 8
        $('#select-reserve').append("<option      value='"+$(this).val()+"'>"+$(this).text()+"</option>")
        $(this).remove()    
      else
        $('#player').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>")
        $(this).remove()
        player_count++

  $('#btn-remove').click ->
    $('#player option:selected').each ->
      $('#users').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>")
      $(this).remove()
      player_count--

  $('#btn-remove-reserve').click ->
    $('#select-reserve option:selected').each ->
      $('#users').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>")
      $(this).remove()

  $("#submit").click ->
   $("select option").prop("selected", "selected")

Я вижу в исходном коде в браузере, что JavaScript был загружен, но он работает только после того, как я перезагрузить страницу.

Комментарии к вопросу (1)

Для turbolinks 5.0 вы должны использовать turbolinks:нагрузка событие, которое называется в первый раз при загрузке страницы, и каждый раз по сайту turbolink посетить. Подробнее: https://github.com/turbolinks/turbolinks#running-javascript-when-a-page-loads

Код CoffeeScript:

$(document).on 'turbolinks:load', ->
  my_func()

Код JavaScript:

document.addEventListener("turbolinks:load", function() {
  my_func();
})
Комментарии (8)
Решение

Это было проблемой turbolinks. Спасибо @zwippie для ведет меня в правильном направлении! Решение было обернуть мой код CoffeeScript в этом:

ready = ->
// functions

$(document).ready(ready)
$(document).on('page:load', ready)
Комментарии (5)

Я думаю, это вопрос turbolinks.

Либо удалить turbolinks от вашего проекта или модифицировать ваш скрипт что-то вроде:

$(function() {
  initPage();
});
$(window).bind('page:change', function() {
  initPage();
});
function initPage() {
  // Page ready code...
}

Как сказано здесь.

Комментарии (1)

Вы можете установить в jQuery.turbolinks камень, чтобы решить проблему, не меняя ваш JavaScript.

Комментарии (1)

Вы можете иметь ваш проект.сайту turbolink месте в нужное положение, как это

 //= require jquery 
 //= require jquery.turbolinks 
 //= require jquery_ujs 
 //= require bootstrap-sprockets 
 //= require turbolinks

И в Gemfile вы можете установить в jQuery-turbolinks камень

gem 'jquery-turbolinks'
Комментарии (1)

Рельсы 5 Использует jQuery.turbolinks Gem и используя

$( document ).on('turbolinks:load', function() {
  // your code
}
Комментарии (0)

Если вы работаете с jQuery плагины, такие как время выбора, Во-первых, использовать jQuery документ готов функция, которая вызывает скрипт, чтобы ждать, пока вся страница загрузится, прежде чем пытаться выполнить, а затем вы можете использовать turbolinks:загружайте событие. </п>

JQuery(function($) {
  $(document).on('turbolinks:load', function() {
    $('.time').clockTimePicker();
  });
});

Это хорошо, чтобы быть расположен в файле приложение/активов/скрипты/... Яш

Комментарии (0)

Я'м пытаясь рельсы 5.2 и нашли, что'turbolinks:загрузить' была'т, как он напивался в первый раз, когда страница загружается. Это то, что мне нужно делать в моем файл CoffeeScript.

document.addEventListener('turbolinks:load', ->
  # ... CoffeeScript code here
)

if !Turbolinks?
  location.reload

Turbolinks.dispatch("turbolinks:load")
Комментарии (0)