Mat*_*hew 22 jquery ruby-on-rails unobtrusive-javascript
在我的rails应用程序中,我有一个看起来像这样的远程表单:
<%= form_tag some_path, :method => :get, :id => 'my-form', :remote => true do %>
<%= text_field_tag :search, params[:search], :id => 'search-field' %>
<%= submit_tag 'Go' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
现在我想通过javascript提交此表单并触发所有rails远程表单回调.到目前为止,我已经尝试了一些东西,但似乎没有任何工作.
我尝试过的事情:
$('#my-form').trigger('onsubmit')
$.rails.callFormSubmitBindings( $('#search-form') )
Run Code Online (Sandbox Code Playgroud)
但到目前为止没有运气.有任何想法吗?
mlt*_*tsy 66
在Rails 5.1+中,用旧jquery-ujs的jquery 替换旧的rails-ujs,上面的答案不再有用,总是通过HTML HTTP请求提交表单.这是您触发新的rails提交事件处理程序的方法:
var elem = document.getElementById('myform') // or $('#myform')[0] with jQuery
Rails.fire(elem, 'submit');
Run Code Online (Sandbox Code Playgroud)
(不能告诉你花了多长时间才弄明白......)出于某种原因,常规事件没有正确地冒泡到使用rails的新委托函数的 rails 附加的委托事件处理程序,当他们由jQuery触发.
Gop*_*ore 65
这只是以Rails方式:
$("#myform").trigger('submit.rails');
Run Code Online (Sandbox Code Playgroud)
如果您无法Rails通过 JavaScript 进行访问,并且您不想尝试进行设置,那么有一个更简单的解决方案!
您可以requestSubmit在 html 元素上使用,而不是提交,它会按照您期望的方式工作,因为会requestSubmit引发submit偶数,但submit不会。
请在此处查看提交和 requestSubmit 之间的区别: https: //developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit
在上述情况下,您可以使用:
$('#my-form')[0].requestSubmit()
Run Code Online (Sandbox Code Playgroud)
如何使用rails_ujs并只需执行以下操作:
Rails.fire(form, 'submit');
Run Code Online (Sandbox Code Playgroud)
(哪里form是DOM元素)
这感觉就像是一种正确的Rails方法。
您可以在此处查看源代码– https://github.com/rails/rails/blob/master/actionview/app/assets/javascripts/rails-ujs/utils/event.coffee#L34
and*_*orp -9
你可以使用.submit();
$("#my-form").submit();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23176 次 |
| 最近记录: |