Rails检查部分在ajax调用之后被完全加载
Rails check partial is fully loaded following ajax call
我在ajax调用后呈现一个分部:
show.js.erb
$("#notice_feed").html("<%=j render 'shared/notice_feed' %>")
_notice_feed.html.erb
<ol class="notices" id="notice_list">
<%= render @notices %>
</ol>
这最终会呈现一个@notices
的列表。每个通知的名称都列在右边,当你点击名称时,我有一些jquery可以向下滚动到相关的渲染@notice
:
name.on('click', function() {
$("#absolute-div").animate({scrollTop: $('#notice_' + this.className).offset().top -200 }, 500);
});
当你点击名称时,它会正确地向下滚动,但有时会在正确的@notice
上停止滚动,而在其他@notices
上则不会滚动。我怀疑问题是在整个部分列表完成渲染之前调用了jquery。我试过用包围javascript
$(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);
}
});
轨道展示方式:
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)。
相关文章:
- 在chrome.tabs.onCreated之后加载HTML页面
- 为什么元素的宽度在页面加载之后和那一刻之后不同
- 在重新加载之后检测窗口的存在
- 如何让C#代码在页面加载时运行的jquery脚本之后运行
- 在第一页加载时隐藏字段,而不是在php发布之后
- angularjs-ui路由器父状态,参数加载在子状态之后
- 在Ajax(过滤器)加载之后加载jQuery脚本
- 地图,rails 4.2,javascript,鼠标悬停,只工作一次(或两次).然后在重新加载之后
- 保持 JavaScript 在浏览器控制台中运行,即使在新的页面加载之后也是如此
- Boostrap远程模式:将动画延迟到加载之后
- 将img加载推迟到页面加载之后
- 在SVG加载之后修改它
- Angular.js控制器在视图加载之后加载
- 在css加载之后、图片下载之前运行代码
- 在页面加载之后而不是在初始阶段删除可见绑定
- 调用函数一次,仅在JQuery创建的图像被加载之后
- 附加& # 39;onclick # 39;事件到SVG元素'在加载之后
- 在<a>标记在窗口加载之后()
- 如何将某些HTML的显示延迟到javascript加载之后
- 保持前一个jquery全局变量的值不变,即使在加载之后也是如此