2012-07-25 47 views
3

我有這樣的代碼在我看來:Ruby on Rails的jQuery的提交形式的js

<%= form_for :folder_name, :remote => true, :method => "get", :url => {:action 
    => "show_workflow_list"} do |f| %> 
    <%= f.select :foldernames, options_for_select(@folders, @folders.first), {}, {:onchange => ("this.form.submit()")}%><br /><br /> 
    <%= hidden_field_tag 'selected_domain', params[:domain_selected] %> 

當我更改下拉值時,窗體被提交爲:

Processing by DeploymentGroupController#show_workflow_list as HTML 
Parameters: {"utf8"=>"Γ£ô", "folder_name"=>{"foldernames"=>"DETAIL_ADJUSTMENT" 

當我添加的,而不是像:onchange=>下面一個提交按鈕:

<%= form_for :folder_name, :remote => true, :method => "get", :url => {:action => "show_workflow_list"} do |f| %> 
    <%= f.select :foldernames, options_for_select(@folders, @folders.first)%><br /><br /> 
    <%= hidden_field_tag 'selected_domain', params[:domain_selected] %> 
    <pre><%= f.submit "Submit"%></pre> 

的請求被提交這樣的:

Processing by DeploymentGroupController#show_workflow_list as JS 
Parameters: {"utf8"=>"Γ£ô", "folder_name"=>{"foldernames"=>"DETAIL_ADJUSTMENT" 

我有下面的代碼在我show_workflow_list行動:

def show_workflow_list 
    //some code 
    respond_to do |format| 
    format.js 
    end 
end 

,我有一個show_workflow_list.js.erb文件,該文件具有以下內容:

$('#workflow_selection').html("<%=j render "show_workflow_list" %>"); 

問題是,當我改變它到onchange=> submit,它正在處理作爲HTML的動作:

Processing by DeploymentGroupController#show_workflow_list as HTML 

而不是JS時,有一個提交按鈕:

Processing by DeploymentGroupController#show_workflow_list as JS 

所以我又回到406個狀態錯誤和show_workflow_list沒有被渲染。


更新:

我明白了爲什麼onchange=>正在爲HTML格式發送。原因是select的格式是「select(object, method, choices, options = {}, html_options = {})」。我提到的地方":onchange=>this.for.submit" is under html_options={}"這就是爲什麼它被提交爲HTML。 我需要呈現在同一頁面上<div>之間的部分_show_workflow_list.html.erb,所以我在我的控制器改變了這樣的代碼:

def show_workflow_list 
    //code here 
    respond_to do |format| 
    format.html{?} 
    end 
end 

在上面的代碼,我需要在{}format.html填寫的東西,使它會在我的make_deployment_group.html.erb中呈現div標記之間的部分_show_workflow_list

回答

3

在一個JS文件,你應該這樣做:

$('#foldernames').change(function() { 
    $('#folder_name').submit() 
}); 

而在你的控制器,你應該有這樣的:

def show_workflow_list 
    //code here 
    render :format => :js 
end 

當您更改值,它應該提交你的表單,以便它應該向你的控制器發送一個ajax請求。您的控制器應呈現js格式並執行您的show_workflow_list.js.erb。要檢查它,你可以使用像firebug一樣的JavaScript控制檯。

+0

我現在明白了爲什麼代碼不是加工。它是這樣的 - >「

」and「