form.submit() 被 rails.js UJS 观察器遗漏

form.submit() missed by rails.js UJS observer

提问人:Marc Schütz 提问时间:3/4/2010 更新时间:10/6/2010 访问量:915

问:

在 Rails 3 应用程序中,我想让浏览器在切换某个复选框时调用远程函数。在 Rails 2 中,这很容易通过传递

:onclick => remote_function(...)

添加到复选框帮助程序。在 Rails 3 中,remote_* 函数已弃用,因此我尝试了以下解决方法:

  • 使用form_tag ... :remote => true
  • 通过从处理程序调用来提交表单$("dummy_form").submit();onclick

在与 Rails 捆绑在一起的 rails.js 文件中,有一个侦听事件的观察者。但是,这些似乎仅在用户单击提交按钮时触发,而不是在调用时触发(到目前为止仅在 FF 中测试过)。submitform.submit()

这会产生不良影响,即提交不是通过 AJAX 在后台完成,而是以正常方式完成,因此浏览器会离开当前站点并显示来自控制器的响应。

有谁知道解决方法?也许是获得相同功能的完全不同的方式?

prototypejs ruby-on-rails-3 不显眼的javascript

评论


答:

1赞 Matt 10/6/2010 #1

您可以通过致电提交表格:

$("dummy_form").request({
    onSuccess: function(response) {eval(response)}
});

这将使用 AJAX 将表单提交到给定的 url form_tag并评估收到的响应,因此它必须使用 JS 进行响应。如果您不想更改 onSuccess 实现,请更改它。

如果表单提交是一种解决方法,正如您所说,那么除了提交整个表单外,您还可以手动处理复选框上的单击事件并发送 AJAX 请求

<%= javascript_tag do %>
Event.observe(window, 'load', function() {
  $('CHECK_BOX_ID').observe('click', function(event) {
    new Ajax.Request('/your/url', {
      onSuccess: function(response) {
        // yada yada yada
      }
    })
  });
});