Rails Javascript onchange 与 <script> 一起工作但不在外部
Rails Javascript onchange works with <script> but not externally
在我的 index.html.erb
文件中,我有一个成功提交 onChange 的表单。但是,这仅在我使用放置在表单后的 <script>
标签时才有效。为什么同样的js在welcome.js
中却不是运行?索引加载为 /welcome
路由。
# app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require jquery-ace.min
//= require jquery.sortable
//= require chartkick
//= require hammer
//= require_tree .
外部js文件
# app/assets/javascripts/welcome.js
$('.chart-radio-icon').change(function(){
$('#mega_form').submit();
});
查看
# views/welcome/index.html.erb
<%= form_tag mega_chart_path, id: 'mega_form', remote: true do %>
<%= radio_button_tag :metric_type, :followers_count, true, :class => 'chart-radio-icon'%>
<%= label_tag(:followers, 'Followers', :class => 'chart-label chart-label-social') %>
同样,将 js 放置在视图中的 <script>
标记中时有效,但在外部无效。
编辑:
因为我们确定您的资产文件未包含在开发中。要进行健全性检查,请尝试此操作并重新启动您的服务器:
Rails.application.config.assets.precompile = %w( application.js application.css )
编辑结束
由于您使用的是 require_tree .
,并且 welcome.js
文件位于 app/assets/javascripts
中,因此它将包含在您应用程序的所有页面中。 See here.
我认为问题在于页面加载时,事件侦听器未分配给 DOM 元素。尝试将您的 JS 代码包装在:
#app/assets/javascripts/welcome.js
$(document).ready(function(){
....
});
在我的 index.html.erb
文件中,我有一个成功提交 onChange 的表单。但是,这仅在我使用放置在表单后的 <script>
标签时才有效。为什么同样的js在welcome.js
中却不是运行?索引加载为 /welcome
路由。
# app/assets/javascripts/application.js
//= require jquery
//= require jquery_ujs
//= require jquery-ace.min
//= require jquery.sortable
//= require chartkick
//= require hammer
//= require_tree .
外部js文件
# app/assets/javascripts/welcome.js
$('.chart-radio-icon').change(function(){
$('#mega_form').submit();
});
查看
# views/welcome/index.html.erb
<%= form_tag mega_chart_path, id: 'mega_form', remote: true do %>
<%= radio_button_tag :metric_type, :followers_count, true, :class => 'chart-radio-icon'%>
<%= label_tag(:followers, 'Followers', :class => 'chart-label chart-label-social') %>
同样,将 js 放置在视图中的 <script>
标记中时有效,但在外部无效。
编辑:
因为我们确定您的资产文件未包含在开发中。要进行健全性检查,请尝试此操作并重新启动您的服务器:
Rails.application.config.assets.precompile = %w( application.js application.css )
编辑结束
由于您使用的是 require_tree .
,并且 welcome.js
文件位于 app/assets/javascripts
中,因此它将包含在您应用程序的所有页面中。 See here.
我认为问题在于页面加载时,事件侦听器未分配给 DOM 元素。尝试将您的 JS 代码包装在:
#app/assets/javascripts/welcome.js
$(document).ready(function(){
....
});