提问人:Marc Schütz 提问时间:3/4/2010 更新时间:10/6/2010 访问量:915
form.submit() 被 rails.js UJS 观察器遗漏
form.submit() missed by rails.js UJS observer
问:
在 Rails 3 应用程序中,我想让浏览器在切换某个复选框时调用远程函数。在 Rails 2 中,这很容易通过传递
:onclick => remote_function(...)
添加到复选框帮助程序。在 Rails 3 中,remote_* 函数已弃用,因此我尝试了以下解决方法:
- 使用
form_tag ... :remote => true
- 通过从处理程序调用来提交表单
$("dummy_form").submit();
onclick
在与 Rails 捆绑在一起的 rails.js 文件中,有一个侦听事件的观察者。但是,这些似乎仅在用户单击提交按钮时触发,而不是在调用时触发(到目前为止仅在 FF 中测试过)。submit
form.submit()
这会产生不良影响,即提交不是通过 AJAX 在后台完成,而是以正常方式完成,因此浏览器会离开当前站点并显示来自控制器的响应。
有谁知道解决方法?也许是获得相同功能的完全不同的方式?
答:
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
}
})
});
});
评论