Le problème est exactement ce que dit le titre. Le javaScript se trouve dans le pipeline d'actifs, c'est-à-dire les actifs / javascripts / myfile.js.coffee Dans l'application.js j'ai:
//= require jquery //= require jquery_ujs //= require turbolinks //= require jquery.ui.all //= requier twitter/bootstrap //= require jasny-bootstrap //= require_tree .
C'est le 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")
Je peux voir dans le code source sur le navigateur que le javaScript a été chargé, mais cela ne fonctionne qu'après la recharge de la page.
Pour les turbolinks 5.0, vous devez utiliser les événements turbolinks: load , qui est appelé la première fois sur le chargement de la page et chaque fois qu'une visite turbolink. Plus d'informations: https://github.com/turbolinks/turbolinks#running-javascript-when-a-page-loads
Code CoffeeScript:
$(document).on 'turbolinks:load', -> my_func()
Code JavaScript:
document.addEventListener("turbolinks:load", function() { my_func(); })
C'était un problème de turbolinks. Merci à @zwippie de me conduire dans la bonne direction! La solution était d'envelopper mon coffeescript en ceci:
ready = -> // functions $(document).ready(ready) $(document).on('page:load', ready)
Je suppose que c'est un problème de turbolinks.
Retirez les turbolinks de votre projet ou modifiez votre script à quelque chose comme:
$(function() { initPage(); }); $(window).bind('page:change', function() { initPage(); }); function initPage() { // Page ready code... }
Comme mentionné ici .
Vous pouvez installer le joyau jquery.turbolinks pour résoudre le problème sans modifier votre Javascript.
Vous pouvez avoir votre jquery.turbolink place à la bonne position comme celle-ci
//= require jquery //= require jquery.turbolinks //= require jquery_ujs //= require bootstrap-sprockets //= require turbolinks
Et dans le Gemfile, vous pouvez installer le joyau jquery-turbolinks
gem 'jquery-turbolinks'
Rails 5 Utilisez le joyau jquery.turbolinks et utilisez
$( document ).on('turbolinks:load', function() { // your code }