jQuery UI手风琴销毁不起作用

时间:2013-01-11 15:09:21

标签: jquery jquery-ui jquery-ui-accordion destroy

当窗口调整到设定点以上时,我遇到了删除手风琴小部件的问题。

我正在使用jQuery 1.8.3和jQuery UI 1.9.2。

这是我的代码:

/*
* Detect browser size and add accordian on page (at load) if necessary
*/
$(document).ready(function() {
    var window_width = $(window).width();  
    if (window_width <= 767){
        $("div.innernav ul.menu").accordion({ 
            header: '.separator',
            animated: 'slide',
            event: "click",
            heightStyle: "content",
            icons: { "header": false, "headerSelected": false } ,
            collapsible: true, 
            active: false,
        });
    }
});
/*
* Detect browser size on resize and add/remove accordian
*/
$(window).resize(function() {
    var wi = $(window).width();
    if (wi <= 767){
        $("div.innernav ul.menu").accordion({ 
            header: '.separator',
            animated: 'slide',
            event: "click",
            heightStyle: "content",
            icons: { "header": false, "headerSelected": false } ,
            collapsible: true, 
            active: false,
        });
    } else if (wi >= 768){
        $("div.innernav ul.menu").accordion("destroy");
    }
});

代码有效,我的手风琴只在窗口宽度小于768px时才有效但我得到了:

Error: cannot call methods on accordion prior to initialisation; attempted to call method 'destroy'

似乎这个错误使我在页面上的其他代码bork所以我可以做到删除此错误。我是一个javascript / jQuery新手,所以非常感谢你的帮助。

非常感谢!

2 个答案:

答案 0 :(得分:1)

尝试将就绪功能更改为单独的功能。

在其他部分:

$("div.innernav ul.menu").empty();

然后只需将ul菜单与ready函数一样重新填充。

答案 1 :(得分:1)

最后,我使用if语句编写函数来检查窗口小部件是否在元素上实际处于活动状态:Check if Widget is Available Before Running Jquery Function

以下是完成的代码:

$(window).load(function(){
    var element = $('div.innernav ul.menu');
    if($(window).width() < 768){
        element.accordion({ header: '.separator', animated: 'slide', event: "click", heightStyle: "content", icons: { "header": false, "headerSelected": false }, collapsible: true, active: false});
    } 
    else {
        element.accordion = false;
    }
    $(window).resize(function(){
        if($(window).width() > 767) {
            element.find('.item').removeAttr('style');
            if(element.accordion) {
                element.accordion('destroy');
                element.accordion = false;
            }
        } 
        else {
            element = $('div.innernav ul.menu');
            element.accordion({ header: '.separator', animated: 'slide', event: "click", heightStyle: "content", icons: { "header": false, "headerSelected": false }, collapsible: true, active: false});
        }
    });
});