我有一个Rails表单,如下所示。我想要做的是让它自动保存在按键上;但是,如果用户单击"Submit“,它将按通常的方式保存。目前,如下图所示,单击"Submit“按钮将通过"Rails.fire”执行ajax保存
示例表单:
<%= form_with(model: [player, report], id: "#{dom_id(report)}_form", class: "contents", data: { controller: "autosave", "autosave-target": "form", action: "ajax:success->autosave#success ajax:error->autosave#error", remote: "true"}) do |form| %>
<%= form.text_field :name, { class: "form-text-field", data: { action: "keyup->autosave#save" } } %>
<%= form.submit class: "px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-purple-600 hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500" %>
<% end %>刺激控制器
import { Controller } from '@hotwired/stimulus'
import Rails from '@rails/ujs'
Rails.start()
export default class extends Controller {
static targets = ['form', 'status']
connect() {
this.timeout = null
this.duration = this.data.get('duration') || 1000
console.log("Autosave enabled.")
}
save() {
clearTimeout(this.timeout)
this.timeout = setTimeout(() => {
this.statusTarget.textContent = 'Saving...'
Rails.fire(this.formTarget, 'submit')
}, this.duration)
}
success() {
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var ampm = hours >= 12 ? 'pm' : 'am';
hours = hours % 12;
hours = hours ? hours : 12; // the hour '0' should be '12'
var dateString = hours + ':' + minutes + ':' + date.getSeconds() + ' ' + ampm;
this.setStatus("Last autosaved at " + date.getDate() + "/" + (date.getMonth()+1) + "/" + date.getFullYear() + " @ " + dateString.replace(/(^|\D)(\d)(?!\d)/g, '$10$2'))
}
error() {
this.setStatus('Unable to Autosave!')
}
setStatus(message) {
this.statusTarget.textContent = message
}
}发布于 2022-11-05 19:33:06
最后我决定把我的按钮改为如下.
注意到"onclick"
<%= form.submit onclick: "this.form.submit();", class: "px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-purple-600 hover:bg-purple-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-purple-500" %>https://stackoverflow.com/questions/74330636
复制相似问题