5

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

:onclick => remote_function(...)

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

  • 使用在复选框周围创建一个表单form_tag ... :remote => true
  • $("dummy_form").submit();通过从onclick处理程序调用提交表单

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

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

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

4

1 回答 1

1

您可以通过调用提交表单:

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

这将使用 AJAX 将表单提交给 form_tag 的 url 并评估收到的响应,因此它必须使用 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
      }
    })
  });
});
于 2010-10-06T12:51:07.497 回答