2013-03-28 81 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

相關問題