1

我在一个用 Bootstrap 构建的网站上有一堆手风琴。我正在尝试添加一种行为,一旦手风琴折叠完成,页面将滚动到打开的面板。它适用于除 IE 之外的所有浏览器(当然!)。这是我写的函数:

$('.accordion').on('hidden', function() {
    $('.accordion .current').removeClass('current');
    $(this).find('.in').prev().find('a').addClass('current');
    $('html,body').animate({'scrollTop':$('.accordion-toggle.current').position().top},500);
})

IE 表示新创建的“当前”项目的 position() 属性未定义。我知道该对象在那里,因为我在 $('.current') 上运行了一个警报,它报告了 [object Object],但它似乎无法找到它的位置。和这个函数的执行队列有关系吗?它是在寻找一个还不存在的物体的位置吗?我在这里扯头发!

HTML:

<div id="accordion" class="accordion"> 
    <div class="accordion-group"> 
        <div class="accordion-heading"> 
            <a class="accordion-toggle" href="#collapseOne" data-parent="#accordion" data-toggle="collapse">Panel 1</a>
        </div> 
        <div id="collapseOne" class="accordion-body collapse"> 
            <div class="accordion-inner"> 
            <!-- Content goes here --> 
            </div> 
        </div> 
   </div> 
</div>

@克里斯·霍勒贝克...

我希望它滚动到当前打开的窗格。Bootstrap 中没有自动提供该功能。它不会将类添加到标题中,而是添加到其下方的窗格中。我也希望标题在窗口中可见。我可能做错了,但这就是我正在尝试做的事情,并且冒着重复自己的风险,它适用于除 IE 之外的所有其他浏览器。

这是一个小提琴,它显示了我正在尝试做的事情。在 IE 中运行它,你会发现它不起作用。

4

1 回答 1

0

问题是这里的这部分。

$(this).find('.in').prev().find('a').addClass('current');

它不起作用的原因是因为.prev()在 IE 中不起作用。因此,它无法识别您正在使用的选择器scrollTop

这就是您收到此错误的原因。

SCRIPT5007: Unable to get value of the property 'top': object is null or undefined 

http://bugs.jquery.com/ticket/2590

这个错误很老了,但它被设置为不会修复,所以我假设他们从未修复它。

我的建议是找到一种不同的方式来获取该选择器。我个人会为父容器设置一个类accordion-heading

就像是:

$('.accordion-toggle').click(function(){
   $(this).parent('.accordion-heading').addClass('open');
});

然后使用:

 $('html,body').animate({'scrollTop':$('.accordion-heading.open').position().top},500);
于 2013-02-28T20:22:16.413 回答