Javascript $not defined Rails 5.1.4,在随机刷新时定义
这就是我没有其他想法的原因。在刷新2/3次时,jQuery将工作,然后不工作 我已经尝试过在我的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
应用程序中重新安排我的=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
在要点上面增加了一个例子和一些额外的见解检查