【问题标题】:Submit Rails 4 form with link instead of button使用链接而不是按钮提交 Rails 4 表单
【发布时间】:2014-07-16 02:30:31
【问题描述】:

我看到了一些类似的问题,但它们似乎是人为的,主要是针对以前版本的 Rails。

提交带有锚标记(链接)而不是普通按钮的表单的最简单方法是什么

<%= f.submit 'Search', :class => "button expand"%>

将其更改为提交链接的最简洁方式(最佳实践)方式是什么?

【问题讨论】:

  • 只是好奇,你为什么要这么做?无论如何,只需向链接的单击事件添加一个处理程序,它会提交表单。
  • 只需将您的按钮设置为看起来像一个链接或使用一些 Javascript 来提交表单。这不是 Rails 特有的。
  • 我已经看到它在几个地方被引用为一个问题,所以我只是好奇是否有一个 Rails-way 或助手可以让它更简单,但基于答案它只是 javascript这会产生预期的结果。

标签: ruby-on-rails ruby


【解决方案1】:

我经常使用 js/jquery 提交表单。如果提交按钮在表单之外或者有多个按钮提交同一个表单,这将非常有用。

$(".submit-btn").click(function(event) {
  event.preventDefault();
  $("#form-id").submit();
});

event.preventDefault(); 阻止默认按钮/提交行为。

这是我在 rails 4 项目中使用的咖啡脚本示例:

ready = ->
  if $("#form-id").length > 0
    $(".submit-btn").click (event) ->
      event.preventDefault()
      $("#form-id").submit()

$(document).ready ready
$(document).on "page:load", ready

另外请注意,这样的链接可以是任何类型的元素 - 不一定是提交按钮。您不必在表单中包含提交按钮,但如果您这样做,preventDefault 将阻止默认的表单提交行为。

【讨论】:

  • 这似乎不适用于 Rails 5,可能是由于表单真实性令牌的问题。
【解决方案2】:

提交

要扩展已经提供的答案,必须使用submit 按钮提交 HTML 表单。

我不确定submit 按钮在链接上究竟有什么特殊特征 - 它本质上调用了submit 操作,而链接不能 (info):

--

链接

这意味着,如果您想用链接替换提交按钮,您基本上必须在您的应用程序中模仿 submit 方法。这可以用 JS (JQuery) 来完成:

#app/assets/javascripts/application.js
$(document).on("click", "#your_link", function(){
   $("#form").submit();
});

#app/views/controller/your_view.html.erb
<%= form_tag your_path, id: "form" do %>
    <%= link_to "Submit", your_path, id: "your_link" %>
<% end %>

【讨论】:

    【解决方案3】:

    这很简单:

    然后:

    <%= f.submit '', :class => "hidden", :id => 'form_submit_button' %>
    content_tag(:a, 'Submit', :name => 'submit', :id => 'submit_link')
    

    在 JS 中:

    $(document).ready(function() {
        $(document).on("click","#submit_link",function() {
            $('#form_submit_button').click();
        });
    });
    

    我不确定确切的语法,因此可能存在一些语法错误。欢迎随时寻求更多帮助。

    【讨论】:

    • 您不需要添加提交按钮并隐藏它。根本不包括它。
    • 但我认为 jquery 已弃用 form.submit() 操作。否则最好不要包含隐藏按钮
    • 已弃用?你从哪里得到这些信息的?
    • 正如我所说的“我认为”不确定是否有人听说过。
    • 哦,好吧,我浏览了文档,但它什么也没说。没有冒犯的意思。
    猜你喜欢
    • 1970-01-01
    • 2013-04-10
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多