我正在使用 BackboneJS 和 Bootstrap,并且我试图在访问者单击按钮后对某些内容启用滚动监视。
因此,当用户单击该按钮时,将执行以下操作:
$('#frontPageNav').css('display', 'block'); // It was hidden on load
$('#frontPageNav').scrollspy(); // Activate scrollspy, this is where the error happens
$('[data-spy="scroll"]').each(function () {
var $spy = $(this).scrollspy('refresh'); // I think this is not needed because nothing was invisible before
});
$('#frontPageNav li').on('activate', function () { // This never gets emitted
alert('activate!');
});
我想被监视的内容是这样放置的:
<div data-spy="scroll" data-target="#frontPageNav">
<div id="home-top" class="row slide">
</div>
<div id="home-how" class="row slide">
</div>
<div id="home-join" class="row slide">
</div>
</div>
页面上没有其他元素具有 data-spy 属性,所以我认为这应该是唯一被监视的内容,但显然不是: On page load I get an error, ,Uncaught TypeError: Cannot read property 'top' of null
这意味着 scrollspy 插件正在尝试查找$.position()
一个不存在的元素。我在 Chrome 的开发人员工具中打开了异常刹车,未捕获的异常在 bootstrap.js 的第 454 行,&& [[$href.position().top, href]]) || null
如果我 hover href
,选择器用于我的标记中没有的元素,但我有一个指向哈希的链接。
这是否意味着 scrollspy 插件认为它应该监视所有链接href="#something"
并在具有该 ID 的标记元素中查找?为什么不保持对元素的间谍活动data-spy="scroll"
?