【发布时间】:2011-06-02 03:48:24
【问题描述】:
我见过一些同事在 Rails 中使用它
$('[data-once=true]').live('ajax:before', function(request, e) {
});
但是我尝试将它与 jquery 一起使用并且它不起作用,这个事件是否与 rails jquery 适配器一起提供?
【问题讨论】:
标签: javascript ruby-on-rails ajax jquery
我见过一些同事在 Rails 中使用它
$('[data-once=true]').live('ajax:before', function(request, e) {
});
但是我尝试将它与 jquery 一起使用并且它不起作用,这个事件是否与 rails jquery 适配器一起提供?
【问题讨论】:
标签: javascript ruby-on-rails ajax jquery
这个'ajax:before' 不是.live() 处理的有用事件,除非您使用该名称定义了一个自定义事件。
【讨论】:
'ajax:before' 不是对.live() 有用的事件,除非您使用该名称定义了自定义事件。我并不是说让特定事件执行特定任务没有用。我是说live() 默认情况下不识别该事件。您需要手动定义自定义事件。
.live() 问题时,您对我的投票(这是正确的)投了反对票,而另一个答案则暗示了.live() 似乎无法识别的另一个事件。顺便说一句,尚不清楚 OP 是否使用 Rails。仅声明同事使用它,并且已经看到该事件与 live() 一起使用。由于 OP 知道适配器,我建议他不使用 Rails。
我不是 rails 开发人员,所以我不确定 rails 是如何改变这个等式的,但这就是我之前在普通 ole' JS 中将函数附加到 AJAX 的方式:
$.ajax({
beforeSend: function(){
alert("Before");
},
complete: function(){
alert("after");
}
});
请注意,这些事件会为之后的所有 AJAX 请求触发。您实际上是在订阅 AJAX 对象。
请参阅jQuery AJAX Events Documentation 了解更多信息。
【讨论】:
是的,ajax:before 是一个 jQuery 事件,用于添加/触发,尽管在最新版本中它不是 ajax:beforeSend。虽然在 jQuery 中(ajax:before 在 JS 框架对 Rails 进行不可知更改之前就已经存在),但您可以使用 ajaxSend global event 全局附加到它,如下所示:
$(document).bind('ajaxSend', function(e, request, options) {
$('[data-once=true]').something();
});
【讨论】:
ajaxSend 可以和.live() 一起使用吗?它仅适用于.bind()(并不意味着我没有遗漏任何东西)。
.live(),here's an example 使用 .bind()。两者都在success 上登录到控制台,但只有bind 版本在ajaxSend 上这样做。
ajaxSend 上,我将调整我上面的示例......他们代理触发器的方式它将与@一起工作987654339@,并没有真正考虑到我原来的变通代码。
.live() 的好解决方法。