3

jquery UI アコーディオン メニューがあります。クリックすると、特定の div 要素が表示されます。たとえば、div3 がアクティブ (可視) のときにページを更新するのだろうか、ページのリロード後に div3 を再びアクティブにするにはどうすればよいですか? 私はクッキーでこれを解決しようとしていますが、うまくいきません。誰かが知っているデモはありますか?

ありがとう。

4

6 に答える 6

6

選択したアコーディオンの状態を最初に保存し、次にページのリロード時または Cookie が残っている限り次の訪問時にその状態をアクティブにするコードを次に示します。

        jQuery(document).ready(function(){
            var act = 0;
            $( "#accordion" ).accordion({
                create: function(event, ui) {
                    //get index in cookie on accordion create event
                    if($.cookie('saved_index') != null){
                       act =  parseInt($.cookie('saved_index'));
                    }
                },
                change: function(event, ui) {
                    //set cookie for current index on change event
                    $.cookie('saved_index', null);
                    $.cookie('saved_index', ui.options.active);
                },
                active:parseInt($.cookie('saved_index'))
            });
        });

jquery cookie プラグインを使用しました。ここからダウンロードできます https://github.com/carhartl/jquery-cookie/

于 2012-06-27T18:46:30.977 に答える
5

新しい 1.10.1 UI を使用

$(function () {
    var icons = {
        header: "ui-icon-triangle-1-e",
        activeHeader: "ui-icon-triangle-1-s",
        headerSelected: "ui-icon-triangle-1-s"
    };
    var act = 0;
    $( "#accordion" ).accordion({
        icons: icons,
        collapsible: true,
        clearStyle: true,
        heightStyle: "content",
        autoHeight: false,
        create: function(event, ui) {
            //get index in cookie on accordion create event
            if($.cookie('saved_index') != null){
               act =  parseInt($.cookie('saved_index'));
            }
        },
        activate: function(event, ui) {
            //set cookie for current index on change event
            var active = jQuery("#accordion").accordion('option', 'active');
            $.cookie('saved_index', null);
            $.cookie('saved_index', active);
        },
        active:parseInt($.cookie('saved_index'))
    });
    $( "#toggle" ).button().toggle(function() {
        $( "#accordion" ).accordion( "option", "icons", false );
    },
    function() {
        $( "#accordion" ).accordion( "option", "icons", icons );
    });
});
于 2013-02-23T19:48:46.953 に答える
3

Cookie やセッション変数を使いたくありませんでした。HTML5 のローカル ストレージを選択しました。

これが私の解決策です:

$("#accordion").accordion({    
    //set localStorage for current index on activate event
    activate: function(event, ui) {        
        localStorage.setItem("accIndex", $(this).accordion("option", "active"));
    },
    active: parseInt(localStorage.getItem("accIndex"))    
});
于 2014-09-26T10:36:02.210 に答える
1

すべてのエントリを閉じたアコーディオンを管理するための上記のソリューションのほんの少しの拡張(アクティブ:false):

$(function () {
    var myact = false;
    $( "#myaccordion" ).accordion({
        clearStyle: true,
        collapsible: true,      // allow to close completely
        create: function (event, ui) {
            //get index in cookie on accordion create event
            if (($.cookie('saved_index') != null) && ($.cookie('saved_index') != 'false')) {
                myact = parseInt($.cookie('saved_index'));
            }
        },
        change: function (event, ui) {
            //set cookie for current index on change event
            myact = ui.options.active;
            $.cookie('saved_index', null, { expires: 2, path: '/' });   // session cookie
            $.cookie('saved_index', myact, { expires: 2, path: '/' });
        },
        active: ($.cookie('saved_index') == null) ? 0 : ($.cookie('saved_index') == 'false') ? false : parseInt($.cookie('saved_index'))
    });
});
于 2012-10-08T08:03:16.243 に答える
1

選択したソリューションはうまくいきませんでした (jQuery 1.8.2、jQuery-UI 1.9.1)。

次のスニペットのように変更しました。

jQuery(document).ready(function(){
    $( "#accordion" ).accordion({
        change: function(event, ui) {
            //set cookie for current index on change event
            $.cookie('saved_index', null);
            $.cookie('saved_index', $( "#accordion" )
                    .accordion( "option", "active" ));
        },
        active:parseInt($.cookie('saved_index'))
    });
});
于 2012-12-04T14:11:59.060 に答える