【问题标题】:Submit form using link_to in rails在 rails 中使用 link_to 提交表单
【发布时间】:2012-07-25 07:58:47
【问题描述】:

我正在尝试使用 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。有谁知道怎么做?

【问题讨论】:

    标签: ruby-on-rails link-to


    【解决方案1】:

    你可以使用:

    <%= link_to 'submit', "#", :onclick => "$('#form_id').submit()" %>
    

    如果您使用的是 JQuery 和更高版本的 rails。

    上面的方法可以,但是如果你的页面很长,它会因为“#”导航到页面顶部,所以如果你想避免这种情况,你可以这样做:

    <%= link_to 'submit', "", :onclick => "$('#form_id').submit()" %>
    

    【讨论】:

    • 感谢您的回答!大帮助!但是它没有传递表单数据,有没有其他方法可以解决这个问题?
    • @pangpang 确保您已允许控制器中的参数
    【解决方案2】:

    我认为这两种情况都会发生。浏览器开始提交表单,但它也遵循链接的href。您可以通过链接到 # 而不是 /post/action 来修复它...

    ...但是,我不建议这样做。有一些更好的方法:

    首先,您可以使用按钮代替链接。您必须对其进行样式设置以使其看起来像一个链接,但这应该不是问题。它会更好,因为它不会违反最小惊喜原则(阅读代码的人希望表单提交带有按钮)并且您不需要 JavaScript。

    如果您坚持使用链接,您至少应该将 JavaScript 代码从视图移至 JavaScript 文件。然后以不显眼的方式添加此行为(尽管您不会对链接有很好的回退)。假设您使用的是 jQuery,它应该很简单:

    $(document).on('click', '[data-submit-form]', function(e) {
      e.preventDefault();
      $(this).closest('form').submit()
    }
    

    【讨论】:

    • 按钮而不是链接是很好的建议
    • e.preventDefault(); 是一个很好的建议 ;)
    • @StefanKanev 感谢您的贡献。我想知道[data-submit-form] 是什么意思,希望您能澄清一下?
    • @BKSpureon 这样您就可以定义一个类似&lt;a href='#' data-submit-form&gt;submit&lt;/a&gt; 的链接,它会自动找到该链接并提交您的表单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多