Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ui jQuery UI Accordion-刷新方法是否覆盖初始化设置?_Jquery Ui_Refresh_Accordion - Fatal编程技术网

Jquery ui jQuery UI Accordion-刷新方法是否覆盖初始化设置?

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

目前我正在从事一个使用jQueryUIAccordion的项目。 因此,我在一个元素上初始化手风琴,方法是

<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();
}