Javascript $not defined Rails 5.1.4,在随机刷新时定义

Javascript $not defined Rails 5.1.4,在随机刷新时定义,javascript,jquery,ruby-on-rails,turbolinks,Javascript,Jquery,Ruby On Rails,Turbolinks,这就是我没有其他想法的原因。在刷新2/3次时,jQuery将工作,然后不工作 我已经尝试过在我的应用程序中重新安排我的=require语句。js是我认为可能的所有方法 //= require jquery //= require rails-ujs //= require jquery-ui/widgets/autocomplete //= require dataTables/jquery.dataTables //= require js.cookie //= require materia

这就是我没有其他想法的原因。在刷新2/3次时,jQuery将工作,然后不工作

我已经尝试过在我的
应用程序中重新安排我的=require语句。js是我认为可能的所有方法

//= require jquery
//= require rails-ujs
//= require jquery-ui/widgets/autocomplete
//= require dataTables/jquery.dataTables
//= require js.cookie
//= require materialize-sprockets
//= require selectize
//= require turbolinks
//= require_tree .
开发环境没有问题,但生产运行Rails 5.1.4,乘客独立,Turbolinks 5。这是行不通的

我尝试移动所有
$(function()
$(document)。
引用了下面的内容,但问题仍然存在

$(document).on('turbolinks:load', function() {
....
}
我确实有一些代码加载到.erb文件中,在块内。也许这就是问题所在

例如:

...
<div class="input-field">
  <select id="case_type" name="case_type">
    <option data-key="blank" value="" disabled selected>Choose a type</option>
    <% @categories_and_types.each do |key,types| %>
      <% data_key = key.gsub(/[^\w]/,'_').downcase %>
      <% types.each do |type| %>
        <option value="<%= type %>" data-key="<%= data_key %>"><%= type %></option>
      <% end %>
    <% end %>
  </select>
  <label>Case Type</label>
</div>

<script>
  document.addEventListener("turbolinks:load", function() {
      if ($('#case_category').data('options') === undefined) {
        $('#case_category').data('options', $('#case_type option').clone());
      }
</script>

...
。。。
选择一种类型
案例类型
document.addEventListener(“TurboLink:load”,函数(){
if($('#case_category')。数据('options')==未定义){
$('#case_category')。数据('options',$('#case_type option')。克隆();
}
...
我是否需要使用javascript_标记而不是实际的块

这就是我的头的样子

<%= javascript_include_tag "application", 'data-turbolinks-track' => true, defer: Rails.env.production? %>
true,延迟:Rails.env.production?%%>
我使用了
defer
而不是
async
,因为有人建议它可以解决这个错误。仍然存在

因此,页面加载时,$notdefined显示出来,我执行以下操作并定义它

这没有任何意义。这一定是一个Turbolinks BUG或其他什么


有什么想法吗?

我认为问题在于,内联的
是在延迟的application.js文件加载之前执行的。jQuery是在application.js文件中编译的(带有
defer
属性),因此在解析文档之前不可用

如果可能的话,我建议将所有JavaScript代码放在application.js文件中。您需要小心避免使用内联脚本和TurboLink复制事件侦听器。例如,如果我使用示例代码重新访问页面,它将添加另一个
turbolinks:load
事件处理程序。因此,要么删除ev在离开页面时使用ent侦听器,或者将所有脚本放在application.js文件中

相关问题:


旁白:您的脚本中似乎缺少一些右括号:

  <script>
    document.addEventListener("turbolinks:load", function() {
      if ($('#case_category').data('options') === undefined) {
        $('#case_category').data('options', $('#case_type option').clone());
      }
    });
  </script>

document.addEventListener(“TurboLink:load”,函数(){
if($('#case_category')。数据('options')==未定义){
$('#case_category')。数据('options',$('#case_type option')。克隆();
}
});

你能公开你放在哪个代码中吗
。erb
在要点上面增加了一个例子和一些额外的见解检查