1

私は自分のアコーディオンを制御するために以下を使用しています:

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

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

同じセクションを 2 回開かない限り、うまく機能します。次に、アコーディオンがフリーズし、次のエラーが表示されます。

ui.newHeader.offset() は未定義です

4

1 に答える 1

3

イベントは、アコーディオンのイベントaccordionchangeに対応するjQueryイベントのようactivateです。はい、これは少し紛らわしいですが、それはソースが私に言っていることです:

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

activateドキュメントには次のように書かれています。

activate(event、ui)

パネルがアクティブ化された後(アニメーションが完了した後)にトリガーされます。[...]アコーディオンが崩壊している場合、空のjQueryオブジェクトになりますui.newHeaderui.newPanel

つまり、あなたui.newHeaderは空のjQueryオブジェクトであり、空のjQueryオブジェクトにはsがありませんoffset()。簡単な長さのチェック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 に答える