1

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

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

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

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

ui.newHeader.offset() 未定义

4

1 回答 1

3

accordionchange事件似乎是对应于手风琴事件的 jQueryactivate事件;是的,这有点令人困惑,但这就是消息来源告诉我的:

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

activate文档有这样的说法:

激活(事件,用户界面)

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

所以你ui.newHeader是一个空的 jQuery 对象,而空的 jQuery 对象没有offset()s. 一个快速的长度检查ui.newHeader可能会让你明白:

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

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

于 2012-11-23T07:51:16.550 回答