滚动事件不起作用,除非页面被重新加载
Scroll event doesn't work unless the page is reloaded
我希望使用JQuery为我的rails应用程序设置一个"向上滚动"按钮。下面是JQuery脚本:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$(window).scroll(function() {
if($(this).scrollTop() > 300) {
$('#toTop').fadeIn();
} else {
$('#toTop').fadeOut();
}
});
$('#toTop').click(function() {
$('body,html').animate({scrollTop:0},300);
});
});
</script>
按钮的CSS:
#toTop {
width:100px;
text-align:center;
padding:5px;
position:fixed;
bottom:5px;
left:50%;
cursor:pointer;
display:none;
color:#333;
font-size:20px;
&:hover {
color: #8B0000;
}
}
当我打开一个新页面时,比如localhost:3000/signup,按钮就会滚动起来。但如果我点击另一个页面,滚动事件就不会发生。因此,如果我重新加载页面或在另一个选项卡中打开一个新页面,该按钮都可以正常工作。什么可能导致这个问题?
turbollinks的工作原理是通过AJAX获取链接的内容并替换文档的内容-这大大加快了页面加载速度。
这样做的一个后果是,当一个页面最初在浏览器中打开时,"document ready"事件只在页面周期中触发一次。
因此,当内容被替换时,您附加到#toTop
元素的事件处理程序将不再存在。
// remember that this is a shorthand for $(document).ready
$(function() {
$(document).on('click', '#toTop', function(){
$('body,html').animate({ scrollTop: 0 }, 300);
});
});
将事件处理程序绑定到文档而不是直接绑定到元素。见https://github.com/turbolinks/turbolinks
我用这一行来包装Jquery脚本,它成功了:
$(document).on('turbolinks:load', function() {
// ...script for button
});
相关文章:
- 创建新数据和加载现有数据需要单独的视图吗
- 钛 - HTTPClient:打开新的控制器加载
- 保持 JavaScript 在浏览器控制台中运行,即使在新的页面加载之后也是如此
- 路由到新页面时加载不起作用
- 如何在新窗口完成加载后执行某些内容
- 使用新标题重新加载 html 页面
- Primefaces在打开新页面时加载数据消息
- Wordpress音频播放器和平滑状态.在新页面重新加载播放器时调用什么回调函数
- 用新数据重新加载renderer3d
- 文本不被渲染后,新的页面加载- JQuery移动
- 需要在新标签中加载pdf/doc文件,而不是下载,只是想在浏览器中阅读
- 用新参数重新加载页面
- Js和CSS不检测新页面何时加载
- 在新页面上加载一个flash视频,它在上一页上的位置
- 在新窗口中加载代码编写器视图
- 在控制台中使用新脚本重新加载页面
- 如何在加载新页面后加载AJAX数据
- 如何使用jQuery在新窗口中加载页面,然后关闭它们
- Jquery没有看到新的HTML加载到对话框中
- 无法用新值重新加载JGrid