jQueryUI - 当相同的部分连续打开两次时,Accordion Scrolling to header冻结

时间:2012-11-23 07:15:39

标签: jquery-ui jquery-ui-accordion

我正在使用以下内容来控制我的手风琴:

$(function() {
  $( "#accordion" ).accordion({
    autoHeight: false, collapsible: true, active: false
  });

  $('#accordion').bind('accordionchange', function (event, ui) {
    $(window).scrollTop(ui.newHeader.offset().top);
  });
});

除非我两次打开同一部分,否则效果很好。然后,手风琴冻结,我得到以下错误:

ui.newHeader.offset()未定义

1 个答案:

答案 0 :(得分:3)

accordionchange事件似乎是与手风琴的activate事件相对应的jQuery事件;是的,这有点令人困惑,但那是source tells me

// change events
(function( $, prototype ) {
    //...
        } else if ( type === "activate" ) {
            ret = _trigger.call( this, "change", event, {

activate documentation有这样说:

  

激活(event,ui)

     

激活面板后触发(动画完成后)。 [...]如果手风琴折叠,ui.newHeaderui.newPanel将是空的jQuery对象。

所以你的ui.newHeader是一个空的jQuery对象,空的jQuery对象没有offset()。对ui.newHeader进行快速检查可能会让您感到厌烦:

$('#accordion').bind('accordionchange', function(event, ui) {
    if(ui.newHeader.length)
        $(window).scrollTop(ui.newHeader.offset().top);
});​

演示:http://jsfiddle.net/ambiguous/e3gUW/