2012-07-25 66 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“