首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我怎么能有Rails表单的数据远程:真,但提交通过按钮定期?

我怎么能有Rails表单的数据远程:真,但提交通过按钮定期?
EN

Stack Overflow用户
提问于 2022-11-05 18:55:11
回答 1查看 25关注 0票数 0

我有一个Rails表单,如下所示。我想要做的是让它自动保存在按键上;但是,如果用户单击"Submit“,它将按通常的方式保存。目前,如下图所示,单击"Submit“按钮将通过"Rails.fire”执行ajax保存

示例表单:

代码语言:javascript
复制
<%= 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 %>

刺激控制器

代码语言:javascript
复制
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
  }
}
EN

回答 1

Stack Overflow用户

发布于 2022-11-05 19:33:06

最后我决定把我的按钮改为如下.

注意到"onclick"

代码语言:javascript
复制
<%= 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" %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74330636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档