jquery UI アコーディオン メニューがあります。クリックすると、特定の div 要素が表示されます。たとえば、div3 がアクティブ (可視) のときにページを更新するのだろうか、ページのリロード後に div3 を再びアクティブにするにはどうすればよいですか? 私はクッキーでこれを解決しようとしていますが、うまくいきません。誰かが知っているデモはありますか?
ありがとう。
選択したアコーディオンの状態を最初に保存し、次にページのリロード時または 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/
新しい 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 );
});
});
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"))
});
すべてのエントリを閉じたアコーディオンを管理するための上記のソリューションのほんの少しの拡張(アクティブ: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'))
});
});
選択したソリューションはうまくいきませんでした (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'))
});
});