ruby on rails jquery提交表单为js

时间:2012-07-25 20:45:41

标签: jquery ruby-on-rails ruby-on-rails-3

我的观点中有这个代码:

<%= 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格式提交的原因。 我需要在同一页面上的_show_workflow_list.html.erb之间渲染部分<div>,因此我更改了控制器中的代码,如下所示:

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

在上面的代码中,我需要填充{} format.html中的内容,以便在我{{1}的_show_workflow_list标记之间呈现部分div }}

3 个答案:

答案 0 :(得分: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控制台。

答案 1 :(得分:1)

这是因为您正在使用jQuery提交调用错误

查看这篇文章......它对我有用 Rails remote form submit through javascript

答案 2 :(得分:0)

试试这个

<%= f.select :foldernames, options_for_select(@folders, @folders.first), {}, {:onchange => remote_function(:method => :get, :url => {:action => 'show_workflow_list'}, :with => 'Form.Element.serialize(this)')}%><br /><br />