【问题标题】:Why f.submit is not working when I try to use it?为什么当我尝试使用 f.submit 时它不起作用?
【发布时间】:2020-07-13 14:38:38
【问题描述】:

我为我的用户数据库创建了一个表单来更改他的密码,如下所示:

<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
  <%= devise_error_messages! %>
  <%= f.hidden_field :reset_password_token %>


 <div class="container">
 <form action="/action_page.php">
 <%= f.label :password, "Nova senha" %><br />
    <% if @minimum_password_length %>
  <em>(Mínimo de <%= @minimum_password_length %> caracteres)</em><br />
    <% end %>
    <%= f.password_field :password, autofocus: true, autocomplete: "off" %>
 </div>

 <div class="container">
     <%= f.label :password_confirmation, "Confirmar nova senha" %><br />
    <%= f.password_field :password_confirmation, autocomplete: "off" %>
 </form>
</div>

<div class="actions">
    <%= f.submit "Alterar minha senha" %>
  </div>
 <% end %>

问题是我的 f.submit "Alterar minha senha" 不起作用,它没有收到我的点击操作。我该如何解决?

【问题讨论】:

  • 如果你发布了渲染的 HTML,我们可以告诉你吗?如果表单中的任何内容都称为提交,则无法使用脚本提交表单

标签: html css ruby-on-rails


【解决方案1】:

问题很可能是nested formed are not allowed in HTML。您已经定义了两种不同的形式,一种在另一种中。第一个是通过您对form_for 的调用生成的。第二个由您的&lt;form&gt; 标签定义。因此,可能发生的是您的提交按钮也在提交内部表单上的字段。

通过查看您的代码,您似乎甚至不需要内部表单 - 您使用来自 form_for 的 FormBuilder f 对象来生成您的内部表单。但是,无论哪种方式,您都应该考虑重新排列表单,以免它们嵌套。

另外,附带说明一下,您的 HTML 无效。您的结束 &lt;/form&gt; 标记位于 .container 的结束 &lt;/div&gt; 标记之前。

【讨论】:

    【解决方案2】:

    您现在有 2 个表单,一个由 form_for() 创建,然后您在 html 中定义另一个表单,按钮不在 html 表单中,因此它不会提交这些字段。从您的 html 中删除标签或移动表单标签中的按钮

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-08
      • 2018-06-29
      • 1970-01-01
      • 2017-05-21
      • 2021-04-02
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      相关资源
      最近更新 更多