Javascript Rails check partial在ajax调用后已完全加载
我在ajax调用后渲染一个部分: show.js.erbJavascript Rails check partial在ajax调用后已完全加载,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我在ajax调用后渲染一个部分: show.js.erb $("#notice_feed").html("<%=j render 'shared/notice_feed' %>") <ol class="notices" id="notice_list"> <%= render @notices %> </ol> 当您单击名称时,它会正确地向下滚动,但有时只会停止滚动正确的@通知,而其他@通知。我怀疑问题在于jquery是在整个部分列表完成
$("#notice_feed").html("<%=j render 'shared/notice_feed' %>")
<ol class="notices" id="notice_list">
<%= render @notices %>
</ol>
当您单击名称时,它会正确地向下滚动,但有时只会停止滚动正确的@通知
,而其他@通知
。我怀疑问题在于jquery是在整个部分列表完成呈现之前调用的。我试着用
$(window).on("load", function() {
...
};
但这不会触发,大概是因为它在加载原始页面时已经触发了
如何使用jquery检查ajax调用后的部分内容是否已完全加载
或者,有没有更好的方法来识别div并准确地滚动到它?您可以通过两种方式来实现这一点: 轨道方式: 在js上创建一个调用动画滚动的方法,如下所示:
name.on('click', function() {
scrolling_to(this.className);
});
function scrollin_to(name){
$("#absolute-div").animate({scrollTop: $('#notice_' + name).offset().top -200 }, 500);
}
然后,在show.js.erb中执行以下操作:
scrolling_to(@notice_show.name);
Js方式:
使用ajax调用rails路由:
jQuery.ajax({
type: 'get',
url: 'your url here',
dataType: 'json',
cache: false,
success: function(data, textStatus){
$("#notice_feed").html(data.msg);
$("#absolute-div").animate({scrollTop: $('#notice_' + data.name).offset().top -200 }, 500);
}
});
Rails显示方法:
def show
data ={
msg: @notice_feed
name: @notice_feed.name
}
render json: data;
end
解决了。我将
.offset()
更改为.position()
。现在它工作得很好
name.on('click', function() {
$("#absolute-div").animate({scrollTop: $('#notice_' + this.className).position().top -200 }, 500);
});
我需要的是
@notices
相对于父对象的位置,而不是文档(jQuery)。很容易找到,所以您可能想将其用作允许单击的门?您正在使用的当前检查无法判断是否有更多的分区要加载。也许您可以尝试使用$(function(){//Handler for.ready()called.})代码>而不是$(窗口)。在(“加载”,function(){…};
上,我在ajax调用后呈现部分:这是在回调中还是在内联中?如果是在回调中,则将其他代码放在同一回调中。如果不是,则应该是。ajax点击控制器的show
操作,然后调用show.js.erb
。
name.on('click', function() {
$("#absolute-div").animate({scrollTop: $('#notice_' + this.className).position().top -200 }, 500);
});