복붙노트

[RUBY-ON-RAILS] 단지 다시로드 한 후 작동 자바 스크립트 레일

RUBY-ON-RAILS

단지 다시로드 한 후 작동 자바 스크립트 레일

문제는 제목이 말한다 정확히 것입니다. 자바 스크립트는 자산 파이프 라인에 즉 자산 / 자바 스크립트 /를 application.js에서 myfile.js.coffee 내가 가진 :

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

이것은 커피 스크립트입니다

$(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")

나는 자바 스크립트가로드되었는지 브라우저의 소스 코드를 볼 수 있지만 페이지를 다시로드 한 후에 만 ​​작동합니다.

해결법

  1. ==============================

    1.페이지로드와 turbolink 방문의 모든 시간에 처음이라고로드 이벤트 : turbolinks 5.0 당신은 turbolinks을 사용해야합니다. 추가 정보 : https://github.com/turbolinks/turbolinks#running-javascript-when-a-page-loads

    페이지로드와 turbolink 방문의 모든 시간에 처음이라고로드 이벤트 : turbolinks 5.0 당신은 turbolinks을 사용해야합니다. 추가 정보 : https://github.com/turbolinks/turbolinks#running-javascript-when-a-page-loads

    커피 스크립트 코드 :

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

    자바 스크립트 코드 :

    document.addEventListener("turbolinks:load", function() {
      my_func();
    })
    
  2. ==============================

    2.이것은 turbolinks 문제였다. 덕분에 올바른 방향으로 날을 선도하기위한 @zwippie합니다! 이 솔루션은이 내 커피 스크립트를 포장했다 :

    이것은 turbolinks 문제였다. 덕분에 올바른 방향으로 날을 선도하기위한 @zwippie합니다! 이 솔루션은이 내 커피 스크립트를 포장했다 :

    ready = ->
    // functions
    
    $(document).ready(ready)
    $(document).on('page:load', ready)
    
  3. ==============================

    3.나는 이것이 turbolinks 문제입니다 같아요.

    나는 이것이 turbolinks 문제입니다 같아요.

    사용자의 프로젝트에서 turbolinks을 제거하거나 같은 당신의 스크립트를 수정 :

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

    로 여기에 언급.

  4. ==============================

    4.당신은 자바 스크립트를 변경하지 않고 문제를 해결하기 위해 jquery.turbolinks 보석을 설치할 수 있습니다.

    당신은 자바 스크립트를 변경하지 않고 문제를 해결하기 위해 jquery.turbolinks 보석을 설치할 수 있습니다.

  5. ==============================

    5.이 같은 올바른 위치에 당신의 jquery.turbolink 장소를 가질 수 있습니다

    이 같은 올바른 위치에 당신의 jquery.turbolink 장소를 가질 수 있습니다

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

    그리고 Gemfile에 당신은 설치할 수 있습니다 보석을 JQuery와는-turbolinks

    gem 'jquery-turbolinks'
    
  6. ==============================

    6.5 레일 jquery.turbolinks 보석을 사용하여

    5 레일 jquery.turbolinks 보석을 사용하여

    $( document ).on('turbolinks:load', function() {
      // your code
    }
    
  7. ==============================

    7.당신이 JQuery와 같은 시계 시간 선택 도구로 플러그인으로 작업하는 경우, 먼저 전체 페이지를 실행하기 전에로드 될 때까지 기다려야 스크립트를 야기 jQuery를 문서 준비 기능을 사용하고 당신은 turbolinks 사용할 수 있습니다로드 이벤트를.

    당신이 JQuery와 같은 시계 시간 선택 도구로 플러그인으로 작업하는 경우, 먼저 전체 페이지를 실행하기 전에로드 될 때까지 기다려야 스크립트를 야기 jQuery를 문서 준비 기능을 사용하고 당신은 turbolinks 사용할 수 있습니다로드 이벤트를.

  8. ==============================

    8.나는 레일 5.2을 시도하고 발견 해요 : 처음에게 페이지가로드를로드하기되지 않은 'turbolinks로드'. 이것은 내가 내 커피 스크립트 파일에 할 필요가 것입니다.

    나는 레일 5.2을 시도하고 발견 해요 : 처음에게 페이지가로드를로드하기되지 않은 'turbolinks로드'. 이것은 내가 내 커피 스크립트 파일에 할 필요가 것입니다.

    document.addEventListener('turbolinks:load', ->
      # ... CoffeeScript code here
    )
    
    if !Turbolinks?
      location.reload
    
    Turbolinks.dispatch("turbolinks:load")
    
  9. from https://stackoverflow.com/questions/17317816/rails-javascript-only-works-after-reload by cc-by-sa and MIT license