Rails远程表单使用'enter'

时间:2017-02-04 04:02:18

标签: javascript jquery ruby-on-rails ruby-on-rails-5 remote-forms

我在页面上有一个表单,它是一个输入字段。我希望用户能够按Enter键提交表单。不幸的是,当enter用于提交时,表单会多次提交。我知道表单被多次提交,因为有多个POST请求被发送到服务器。它发生在开发和生产中,只是偶尔发生。

= form_for thing, remote: true do |f|
  = f.text_field :name, placeholder: "hit enter to submit"

如果我在表单中添加f.submit,则只会提交一次。

这是Rails 5,turbolinks中包含jquery_ujsapplication.js,如果这有任何区别的话。

更新

在进行一些更改后,我无法重现。

我怀疑问题与在页面上多次加载jquery_ujs有关。这是由于turbolinks。更确切地说,由于我在body标记中包含了所有javascript。 turbolinks建议在head标记中添加您的javascript文件。由于这样做,我无法重现错误。

2 个答案:

答案 0 :(得分:1)

使用turbolink时,使用正确的方法添加事件处理程序非常重要。不要在HTML正文标记中放置任何Javascript。使用turbolinks文档确定需要挂钩的事件,以添加自己的事件处理程序或进行页面元素的其他转换。

当前版本的turbolinks:https://github.com/turbolinks/turbolinks#full-list-of-events 更早版本的turbolinks:https://github.com/turbolinks/turbolinks-classic#events

当前版本还有一些recommendations on making your document changes idempotent,我也会为添加事件监听器而做。

答案 1 :(得分:0)

出现此类症状的另一个案例是同时使用rails-ujsjquery_ujs。对于我的观察,如果rails-ujs在application.js中jquery_ujs之前发生,一切正常,但在另一个案例中出现两次ajax表单提交。