我有一张包含以下内容的表格:
<% form_remote_tag :url => {:action => :wotsit} do %>
<%= submit_tag "Foo" %>
<%= submit_tag "Bah" %>
<% end %>
我希望提交的参数能反映出哪个按钮被点击了。但是,无论我点击哪个按钮,提交的参数都包含"commit"=>"Foo"
。
我做错了什么?
答案 0 :(得分:5)
form_remote_tag生成一些Javascript,它使用Prototype的Form.serialize方法将表单字段的值发送到服务器。 Form.serialize总是使用名为“commit”的第一个元素,所以它总是“Foo”。
作为一种解决方法,你可以添加一个隐藏的字段&amp;将您的提交标记设置为该字段&amp;提交表格:
<%= hidden_field_tag "real_commit", "" %>
<%= button_to_function "Foo", "$('real_commit').value='Foo';$('myform').submit();" %>
<%= button_to_function "Bah", "$('real_commit').value='Bah';$('myform').submit();" %>
答案 1 :(得分:1)
您可以使用2x button_to_remote
或2x link_to_remote
来代替使用包含两个提交代码的表单:
<%= button_to_remote "Foo", :url => { :action => :wotsit } %>
<%= button_to_remote "Bah", :url => { :action => :wotsit } %>
我认为button_to_remote
发送“Foo”或“Bah”。 link_to_remote
肯定会不。但是,您可以使用:with
选项发送任何内容作为参数。
答案 2 :(得分:1)
试试这个
<% form_remote_tag(:url => {:controller => "test", :action => "test_123"},:html => {:id => "form_test"}) do %>
<%= hidden_field_tag "submit" %>
<%= submit_tag "Restore", :id => 'restore', :value => "", :onclick => "$('download').disabled = true;$('delete').disabled = true;$('submit').value='restore';" %>
<%= submit_tag "Download", :id => 'download', :value => "", :onclick => "$('restore').disabled = true;$('delete').disabled = true;$('submit').value='download';" %>
<%= submit_tag "Delete", :id => 'delete', :value => "", :onclick => "$('restore').disabled = true;$('download').disabled = true;$('submit').value='delete';" %>
<% end %>
def test_123
case params[:submit]
when "restore"
when "download"
when "delete"
end
end
答案 3 :(得分:0)
恕我直言,这是一个触摸清洁工......
<%= hidden_field_tag "real_commit", "" %>
<%= f.submit "Foo", :OnClick => "$('#real_commit')[0].value='Foo'" %>
<%= f.submit "Bar", :OnClick => "$('#real_commit')[0].value='Bar'" %>