我在 Ruby on Rails 3.0.7 应用程序中使用 jQuery 1.6.2 并希望切换.live()
到.delegate()
(计划升级到 jQuery 1.7 并使用.on()
)。我正在使用 Rails 中的选项发送 ajax 请求并尝试为使用事件:remote => true
的响应设置处理程序。ajax:complete
这些 ajax 请求通常会删除/替换实际触发请求的元素。
我遇到的问题是,如果一个元素被 ajax 请求替换,.live()
似乎ajax:complete
在请求完成时无论如何都会触发处理程序,但.delegate()
没有(另外,我对 jQuery 1.7 做了一些实验,发现它.on()
不起作用任何一个)。
本质上,如果ajax_link
元素被替换,这有效:
$(".ajax_link").live("ajax:complete", function(){
//Do something...
});
但这不会:
$("body").delegate(".ajax_link", "ajax:complete", function(){
//Do something...
});
关于为什么会发生这种情况的任何想法?我在 SO 的其他地方读到了在幕后.delegate()
使用的,所以这种行为让我感到惊讶。.live()
此外,任何有关解决此问题的更好方法的建议都将受到欢迎。