Jquery ui jQuery UI Accordion-刷新方法是否覆盖初始化设置?
目前我正在从事一个使用jQueryUIAccordion的项目。 因此,我在一个元素上初始化手风琴,方法是Jquery ui jQuery UI Accordion-刷新方法是否覆盖初始化设置?,jquery-ui,refresh,accordion,Jquery Ui,Refresh,Accordion,目前我正在从事一个使用jQueryUIAccordion的项目。 因此,我在一个元素上初始化手风琴,方法是 <div id="accordion"></div> $('#accordion').accordion({ collapsible: true, active: false, heightStyle: "content" }); $('手风琴')。手风琴({ 可折叠的:是的, 活动:错误, 高度样式:“内容” }); 在初始化acc
<div id="accordion"></div>
$('#accordion').accordion({
collapsible: true,
active: false,
heightStyle: "content"
});
$('手风琴')。手风琴({
可折叠的:是的,
活动:错误,
高度样式:“内容”
});
在初始化accordion之后,我附加了一些来自AJAX请求的数据。(取决于用户交互)
在一个简化的示例中——它与ajax调用的作用完全相同——您可以看到它的样子。
到目前为止,它似乎运行得很好,但我面临一个问题。
在我的初始化中,我说我希望所有面板都关闭,但在手风琴上调用刷新后,所有这些设置似乎都消失了,一个面板打开了
注意,我在fiddle中实现了jQueryUIV1.10.2。说
刷新方法现在将识别已添加或删除的面板。这使accordion与选项卡和其他小部件保持一致,这些小部件解析标记以查找更改
是的,但是为什么要“覆盖”我为这个手风琴定义的设置呢?
我还考虑到在一个空的
上创建手风琴可能是错误的,所以我用一个给定的条目测试了它,然后添加了一些元素。
但结果却完全相同
在最近的一次调查中,我发现有人基本上做了和我一样的事情,但在他的工作中,他面临着同样的“问题”。
他添加了一个新面板,第一个面板在刷新后打开
我目前解决这个问题的办法是销毁手风琴,并在每次有新内容时重新创建它。
但这对我来说似乎相当粗糙,我认为刷新方法解决了每次应用新内容时销毁手风琴的问题。
看到最后一个了吗
$(文档).ready(函数(){
//显示“新”内容的变量正确追加
var-foo=1;
$('clickMe')。在('click',函数(){
var数据=“”;
对于(变量i=0;i<3;i++){
数据+=‘标题’+foo+‘内容’;
foo++;
}
if($('#accordion').hasClass('ui-accordion')){
$('手风琴')。手风琴('销毁');
}
$('#accordion').empty().append(data).accordion({
可折叠的:是的,
活动:错误,
高度样式:“内容”
});
});
});
不幸的是,我不能选择更改给定3个条目的内容,因为面板的数量不同
因此,我的问题是标题中的问题,如果需要这样的行为,或者有人面临同样的问题?有关此行为的解释,请查看jquery ui accordion小部件的refresh()方法,您面临的问题在第10行:
refresh: function() {
var options = this.options;
this._processPanels();
// was collapsed or no panel
if ((options.active === false && options.collapsible === true) || !this.headers.length) {
options.active = false;
this.active = $();
// active false only when collapsible is true
} if (options.active === false) {
this._activate(0); // <-- YOUR PROBLEM IS HERE
// was active, but active panel is gone
} else if (this.active.length && !$.contains(this.element[0], this.active[0])) {
// all remaining panel are disabled
if (this.headers.length === this.headers.find(".ui-state-disabled").length) {
options.active = false;
this.active = $();
// activate previous panel
} else {
this._activate(Math.max(0, options.active - 1));
}
// was active, active panel still exists
} else {
// make sure active index is correct
options.active = this.headers.index(this.active);
}
this._destroyIcons();
this._refresh();
}
refresh:function(){
var options=this.options;
这个;
//已折叠或没有面板
if((options.active==false&&options.collapsable==true)| |!this.headers.length){
options.active=false;
this.active=$();
//仅当“可折叠”为true时,才为active false
}如果(options.active==false){
这个。_activate(0);//我明白了……你能解释一下这个。_activate(0);
的意思吗?它是否将可折叠设置为false,因此活动false不能再工作了?我不明白为什么它在检查活动是否为false和可折叠true时会这样做……然后将这些设置更改为O这个。_activate(0)
激活手风琴的第一个面板。可折叠选项没有被修改(正如您在JSFIDLE中看到的,您仍然可以折叠所有面板)。我也看不到这背后的逻辑。您可以做的一件事是在刷新后用更改激活选项。手风琴('option',{active:false})
但您将看到面板关闭动画…您的解释对实现很有意义…嗯…不是真的O.O是的,我尝试在刷新后将active设置为false,但这看起来很难看^^^嗯,但它不是一个bug,或者是吗?我的意思是,它对我来说似乎不符合逻辑,但我不知道是否可以称之为bug。另一方面,它什么都没有我真的可以做些什么来解决这个问题,或者?我找到了一张罚单,似乎是个bug。但他们正在努力解决它
refresh: function() {
var options = this.options;
this._processPanels();
// was collapsed or no panel
if ((options.active === false && options.collapsible === true) || !this.headers.length) {
options.active = false;
this.active = $();
// active false only when collapsible is true
} if (options.active === false) {
this._activate(0); // <-- YOUR PROBLEM IS HERE
// was active, but active panel is gone
} else if (this.active.length && !$.contains(this.element[0], this.active[0])) {
// all remaining panel are disabled
if (this.headers.length === this.headers.find(".ui-state-disabled").length) {
options.active = false;
this.active = $();
// activate previous panel
} else {
this._activate(Math.max(0, options.active - 1));
}
// was active, active panel still exists
} else {
// make sure active index is correct
options.active = this.headers.index(this.active);
}
this._destroyIcons();
this._refresh();
}