2013-03-28 84 views
1

我讨厌甚至问这个,因为我确定它很明显,但我花了几个小时寻找答案,找不到一个答案。Javascript加载在application.js文件中,但在Rails 3.2中不起作用

我有一个简单的JavaScript(jQuery)代码,它使用'滑动'功能。我在表单部分使用它来显示或隐藏基于选择的字段。如果我把代码直接放到表单中,它就可以很好地工作。如果我将它放到assets/javascript文件夹中,它将包含在application.js文件中,但不起作用。

对于测试,我还放入了一个JavaScript警报,以查看它是否正在加载,并且警报触发。我无法想象出我的生活。

这里是位于我的应用程序/资产/ JavaScript的/ form.js的JavaScript:

$('#Postponement').change(function() { 
    if ($("#NewWeddingDate").is(":hidden")) { 
     $("#NewWeddingDate").show("slow"); 
    } else { 
     $("#NewWeddingDate").slideUp(); 
    } 
    }) 


$(function(){ 
    alert('got to application.js!'); 
}) 

这是相关表格的代码(我使用Formtastic):

<div id='Postponement' > 

    <%= f.input :Postponement, :label => "Will the wedding be postponed?", :input_html => { :id => 'Postponement' }, :as => :select, :include_blank => false, :collection => ['Yes', 'No'], :selected => 'Yes' %> <br /> 

    </div> 

    <div id = 'NewWeddingDate' > 

    <%= f.input :NewWeddingDate, :label => "The new wedding date is:", :input_html => { :id => 'NewWeddingDate' }, :as => :date_select, :start_month => Time.now.month, :start_year => Time.now.year, :end_year => Time.now.year + 10, :order => [:month, :year] %><br /> 

    </div> 

我application.html.erb包含<%= javascript_include_tag "application" %>,如果我直接将该JavaScript代码添加到_form.html.erb文件中,它可以正常工作。我绝对是这个东西的新手,所以我相信这是明显的。我可以把代码留在_form.html.erb中,但我试图用正确的方式(Rails)来完成。任何和所有的帮助,将不胜感激。

回答

0

尝试在文档加载后运行代码。现在,它可能在#Postponement之前立即执行,除非将它放在部分表单中。例如:

$(function() { 
    $('#Postponement').change(function() { 
     if ($("#NewWeddingDate").is(":hidden")) { 
      $("#NewWeddingDate").show("slow"); 
     } else { 
      $("#NewWeddingDate").slideUp(); 
     } 
    }) 
}); 

放置你的函数内$()确保它运行after the DOM is fully ready

+0

就是这样!非常感谢。 因此,向前迈进,我是否需要将所有的javascript包装在这样的函数中以确保它们最后被加载?我的印象是,通过资产管道,application.js将首先加载以避免这种确切类型的问题。 再次感谢。 – 2013-03-28 13:11:18

相关问题