当前位置 : 主页 > 大数据 > 区块链 >

prototype_s – form.submit()错过了rails.js UJS观察者

来源:互联网 收集:自由互联 发布时间:2021-06-22
在Rails 3应用程序中,只要切换某个复选框,我想让浏览器调用远程函数.在Rails 2中,通过传递很容易做到 :onclick = remote_function(...) 到复选框助手.在Rails 3中,不推荐使用remote_ *函数,因此我尝试
在Rails 3应用程序中,只要切换某个复选框,我想让浏览器调用远程函数.在Rails 2中,通过传递很容易做到

:onclick => remote_function(...)

到复选框助手.在Rails 3中,不推荐使用remote_ *函数,因此我尝试了以下解决方法:

>使用form_tag …:remote =>在复选框周围创建一个表单真正
>通过调用$(“dummy_form”)提交表单.remit();来自onclick处理程序

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

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

有没有人知道解决方法?也许是一种完全不同的方式来获得相同的功能?

您可以致电提交表格:

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

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

如果表单提交是一种解决方法,正如您所说,那么您也可以手动处理复选框上的点击事件而不是提交整个表单,并发送AJAX request:

<%= 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
      }
    })
  });
});
网友评论