关于accordionactivate的jQuery UI确定面板是否打开或关闭

时间:2013-01-12 22:59:40

标签: jquery jquery-ui accordion

我实际上正在研究一个jQuery UI手风琴,我试图找到我怎么知道面板何时打开或关闭所以我可以为这两个事件执行不同的功能。

$("#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

感谢您的帮助!

2 个答案:

答案 0 :(得分: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);
  }
});

答案 1 :(得分:1)

我知道问题已经过时了,但我今天遇到了它。来自手风琴文档here

  

如果手风琴当前已折叠,请使用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");
    }
});