0

我实际上正在开发一个 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);
  }
});

我试图观察对象是否为空:否

我试图查看活动索引是否为假:仅在最后一个面板关闭时为假

谢谢你的帮助!

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 回答