我在页面上有一个表单,它是一个输入字段。我希望用户能够按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_ujs
和application.js
,如果这有任何区别的话。
更新
在进行一些更改后,我无法重现。
我怀疑问题与在页面上多次加载jquery_ujs
有关。这是由于turbolinks
。更确切地说,由于我在body
标记中包含了所有javascript。 turbolinks
建议在head
标记中添加您的javascript文件。由于这样做,我无法重现错误。
答案 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-ujs
和jquery_ujs
。对于我的观察,如果rails-ujs
在application.js中jquery_ujs
之前发生,一切正常,但在另一个案例中出现两次ajax表单提交。