Rails Asset Pipeline没有加载我的javascript文件(为什么这段代码不起作用

如果我将它包含在视图本身中,并且如果我将它直接包含在Application.js文件中,则该代码可以正常工作,但如果我将它包含在assets / javascripts / mailers.js文件中,它将无效。告诉我我做错了什么,谢谢。

function myFunction(val) { if (val.length == 10) { document.getElementById('search_button').focus();}}; 

也许我说错了? 这是视图中的代码:

  

还有什么我必须添加到上面包含的mailers.js文件中吗? 因为这就是该文件中的所有内容。 mailers.js文件中唯一的代码是:

 function myFunction(val) { if (val.length == 10) { document.getElementById('search_button').focus();}}; 

您可能错过了将文件包含在清单文件中。 清单文件将assets/javascripts目录中的所有.js文件预编译为一个大文件。 这是您的应用程序上运行的文件。 如果你没有你的.js文件,它就不包括在内,这就是没有任何反应的原因。

包含文件的正确方法是:

 //= require mailers.js 

在你的application.js文件中。 更重要的是,默认情况下你有

 //= require_tree . 

这需要来自assets / javascript路径的所有js文件。

如果你想专门为视图包含它,请删除tihs:

 <%= javascript_include_tag "mailers", "data-turbolinks-track" => true %> 

为此,如果预编译为false,则必须单独添加文件: 在config / initializers / assets.rb中

  Rails.application.config.assets.precompile += %w( mailers.js ) 

或者在config / application.rb中

 config.assets.precompile += %w( mailers.js ) 

问题可能是如果您具有相同名称的.js和.coffeescript文件,则应用程序会预编译错误的文件。 你可以尝试跑步

  rake assets:clean rake assets:precompile 

然后再次运行服务器。

我在Rails 5上遇到了同样的错误。 我的javascript文件与coffee文件的名称相同时未加载。

我解决了它改为另一个名字。

希望它可以帮助你或某人。

您是否尝试过将application.js文件中的mailers.js文件包含在内?

//= require mailers

检查您的布局文件。 如果javascript_include_tag位于页面的head部分,请尝试从那里删除它,然后将其放在结束标记之前。 另一个工作是将你的代码放在document.ready函数之间:

 $(document).ready(function (){ function myFunction(val) { if (val.length == 10) { document.getElementById('search_button').focus() }; }; }