0

私は実際にjQueryUIアコーディオンに取り組んでおり、両方のイベントに対して異なる関数を実行できるように、パネルが開いているか閉じているかを知る方法を見つけようとしています。

$("#accordion").bind('accordionactivate', function(event, ui) {
  $(ui.newPanel).find('.itemChildren').empty();
  var index = $("#accordion").accordion("option", "active");
  alert($.isEmptyObject(ui.oldPanel));
  if( index !== false){
    var item = {};
    item[Settings.id_item] = Tree.getTreeItemId(ui.newPanel);
    Tree.displayChildren(item, Settings, Url);
  }
});

オブジェクトが空かどうかを監視しようとしました:いいえ

アクティブなインデックスがfalseかどうかを確認しようとしました:最後のパネルが閉じたときにのみfalse

ご協力いただきありがとうございます!

4

2 に答える 2

1

これはおそらく最善の方法ではありませんが、私にとってはうまくいきます。newPanelのクラスが存在するかどうかを確認するだけです。

$("#accordion").bind('accordionactivate', function(event, ui) {
  if(typeof $(ui.newPanel).attr('class') === 'undefined'){
    $(ui.oldPanel).find('.itemChildren').empty();
  } else {
    var item = {};
    item[Settings.id_item] = Tree.getTreeItemId(ui.newPanel);
    Tree.displayChildren(item, Settings, Url);
  }
});
于 2013-01-12T23:47:41.967 に答える
1

質問が古いことは知っていますが、今日私はそれに出くわしました。ここのアコーディオンのドキュメントから:

アコーディオンが現在折りたたまれている場合、ui.oldHeaderとui.oldPanelは空のjQueryオブジェクトになります。アコーディオンが崩壊している場合、ui.newHeaderとui.newPanelは空のjQueryオブジェクトになります。

したがって、ui.newHeaderが空でない場合、アコーディオンが開こうとしています。または、ui.oldHeaderが空でない場合、アコーディオンは崩壊しようとしています。以下のコードは私にとってうまく機能しました:

$("#accordion" ).on( "accordionbeforeactivate", function( event, ui ) {
    if (ui.newHeader.size()) {
        console.log("Activating");
    } else if (ui.oldHeader.size()) {
        console.log("Deactivating");
    }
});
于 2016-03-11T21:02:30.880 に答える