也许对于那些使用jquery-ujs
(Rails 5.0 默认及以下版本)的人来说,正如 Mikhail 已经回答的那样,触发自定义 jquery 事件将起作用,即:
$("#new_subscription").trigger("submit.rails");
对于那些在 2017 年偶然发现这个问题并使用 Rails 5.1 的人来说,答案会有所不同。Rails 5.1 已jquery
作为依赖项删除,因此已被jquery-ujs
完全重写的rails-ujs
. 见:http ://weblog.rubyonrails.org/2017/4/27/Rails-5-1-final/
因此,您必须在 rails-ujs 中触发正确的CustomEvent 对象:
截至目前,文档(又名 RailsGuides)中没有发布/推荐的方法,但这里有一些选项,您只需查看 Rails 的源代码即可使用:
使用Rails.fire
功能:
nativeFormEl = $("#new_subscription")[0] // you need the native DOM element
Rails.fire(nativeFormEl, 'submit')
您还可以以编程方式调用处理程序(通过 XHRRails.handleRemote
实际提交表单的处理程序:data-remote=true
nativeFormEl = $("#new_subscription")[0] // you need the native DOM element
Rails.handleRemote.call(nativeFormEl, event); // unfortunately, you cannot reference the previously created submit CustomEvent object by rails-ujs.js
// ... or ...
Rails.handleRemote.call(nativeFormEl) // submits via XHR successfully, but throws an error after success callback at Rails.stopPropagation
我更喜欢选项 1,因为它只是一个使用更新的 Web API 方法的包装器,即创建 aCustomEvent
并将其分派到EventTarget
via dispatchEvent
。