我正在尝试使用link_to提交表单,如下所示:
<%= form_for(@post, :url=> '/post/action', :method=> 'post', :html => {:id=>'form_id'} ) do |f| %>
....
<%= link_to 'submit', "/post/action", :onclick=>"document.getElementById('form_id').submit()" %>
....
但它没有发布表单,它只是将我的表单重定向到指定的URL。有谁知道怎么做?
答案 0 :(得分:24)
您可以使用:
<%= link_to 'submit', "#", :onclick => "$('#form_id').submit()" %>
如果您使用的是JQuery和更高版本的rails。
上面会有效,但是如果你有一个非常长的页面,它将导航到页面顶部,因为“#”所以如果你想避免你可以这样做:
<%= link_to 'submit', "", :onclick => "$('#form_id').submit()" %>
答案 1 :(得分:8)
我认为这两件事都会发生。浏览器开始提交表单,但它也跟在链接的href
之后。您可以通过链接到#
而不是/post/action
...
...但是,我不建议这样做。有一些更好的方法:
首先,您可以使用按钮而不是链接。你必须设计它以使它看起来像一个链接,但这不应该是一个问题。它会更好,因为它不会破坏最小惊喜原则(阅读代码的人希望使用按钮提交表单)并且您不需要JavaScript。
如果您坚持使用链接,至少应该将JavaScript代码从视图移动到JavaScript文件。然后不引人注意地添加此行为(尽管,您将无法通过链接获得良好的后备)。假设您使用的是jQuery,它应该像以下一样简单:
$(document).on('click', '[data-submit-form]', function(e) {
e.preventDefault();
$(this).closest('form').submit()
}