3

我为 js.erb 文件中的部分编写了一些 jQuery。这个 jQuery 变成了通用函数,我决定将其放入资产管道中,即assets/javascripts/myfile.js现在 JavaScript 不再工作。我可以从源代码中看到 JavaScript 正在加载到浏览器中,但它什么也没做,但它以前作为 js.erb 文件工作。

可能是什么问题呢?

在 application.js 我有

//= require jquery
//= require_tree .

这是我的js:

$(document).ready(function() { 
  $("#close").click(function(){
    $(this).parent().parent().slideUp("slow");
  });


  $(function() {
    $( "#datepicker" ).datepicker({
      dateFormat : "yy-mm-dd"
    });
  });

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


  $('#btn-add').click(function(){
    $('#users option:selected').each( function() {
      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(function(){
    $('#player option:selected').each( function() {
      $('#users').append("<option value='"+$(this).val()+"'>"+$(this).text()+"</option>");
      $(this).remove();
      player_count--;
    });
  });

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

  $("#submit").click(function(){

    $("select option").prop("selected", "selected");

  });
});

我注意到一个新的发展,js 在重新加载后工作。但是,每当第一次进入页面(直接来自链接)时,它都不起作用。

4

3 回答 3

4

This was a turbolinks problem. The solution was to wrap my coffeescript in this:

ready = ->
// functions

$(document).ready(ready)
$(document).on('page:load', ready)
于 2013-06-26T19:43:52.170 回答
2

你在 jQuery 之前application.js加载。myfile.js假设这个文件仍然包含 jQuery 代码,它不会正确运行,因为 jQuery 尚未定义。您的浏览器的 JS 控制台是否显示类似:“Uncaught ReferenceError: $ is not defined”?

请注意,Rails 通常会生成application.js如下所示的:

//= require jquery
//= require jquery_ujs
//= require_tree .

此外,如果myfile.js包含 ERB 代码,那么您需要将其重命名myfile.js.erb为 @Flauwekeul 建议的那样。

于 2013-06-19T17:38:32.820 回答
0

I was having the exact same problem Jason Carty. Later on I found out that the issue was caused because I had:
  = javascript_include_tag "vendor/modernizr"
  = javascript_include_tag "application", 'data-turbolinks-track' => true
below "yield", in the bottom of my body tag. I moved it back to the top, after stylesheets and before "csrt_meta_tags", above my body tag and now works flawlessly.

于 2015-04-04T08:39:52.137 回答