gpt4 book ai didi

jquery 如何使用 filtrify 插件在页面重新加载后保留设置?

转载 作者:行者123 更新时间:2023-12-01 01:34:46 24 4
gpt4 key购买 nike

首先我想说我已经做了功课。我知道 javascript 不应该在页面重新加载后保留其设置。

我还发现了 3 种方法:
1. Cookie
2.html本地存储
3. Ajax

在尝试使用 html 本地存储来实现此目的几天后,我已经放弃了。我找到了这个教程,它允许缓存整个 html 界面 - see "Caching a whole interface" 。我使用这种方法取得了一些进展,但最终失败了。

这是我的filtrify代码:

<script type="text/javascript">
$(function() {
var container = $("#itemListLeading"),
pagination = $("#pagination");

function setLazyLoad () {
container.find("img").lazyload({
event : "turnPage",
effect : "fadeIn"
});
};

function setPagination () {
pagination.jPages({
containerID : "itemListLeading",
perPage : 9,
direction : "auto",
animation : "fadeInUp",
previous : "a.jprev",
next : "a.jnext",
callback : function( pages, items ){
items.showing.find("img").trigger("turnPage");
items.oncoming.find("img").trigger("turnPage");
}
});
};

function destroyPagination () {
pagination.jPages("destroy");
};



setLazyLoad();
setPagination();

var ft = $.filtrify("itemListLeading", "placeHolder", {
close: true, // Close windows after tag select
block : "data-original",
callback: function ( query, match, mismatch ) {

if ( mismatch.length ) $("div#reset").show(); // Show Reset
else $("div#reset").hide();

$('.ft-label').parent() // Hide unrelated tags
.find('li[data-count=0]').hide().end()
.find(':not(li[data-count=0])').show().end();

$(".ft-selected li").css("display","inline-block"); // small tag display fix

destroyPagination();
setPagination();

}
});

$("div#reset span").click(function() { // Make reset button clickable
ft.reset();
});
});
</script>

这是我在本地存储实现方面的尝试:

 $(function() {
var edit = document.getElementById('filter-menu');
$(edit).blur(function() {
localStorage.setItem('todoData', this.innerHTML);
});

// when the page loads
if ( localStorage.getItem('todoData') ) {
edit.innerHTML = localStorage.getItem('todoData');
}

$("#reset span").click(function() { // Reset cache button
localStorage.clear();
location.reload();
});
});

我遇到的问题:
1.缓存并不总是有效(我使用.click函数得到了更好的结果)

2.当缓存起作用时,它会缓存过滤器设置的状态(按下的按钮),但会显示所有过滤器对象(而不仅仅是与过滤器设置相关的对象)

3.我无法使用重置按钮(代码的最后一段)重置缓存(重新加载有效),尽管当我复制 localStorage.clear(); firebug 控制台缓存中的 location.reload(); 已重置。

最佳答案

在您的 filtrify 回调函数中,您需要将查询保存为字符串,例如本地存储

localStorage.setItem('ftquery', JSON.stringify(query))

然后在实例化 filtrify 后,您需要“触发”查询

ft.trigger(JSON.parse(localStorage.getItem('ftquery')));

因此,要使用您的代码示例,请像这样编辑 filtrify 部分:

var ft = $.filtrify("itemListLeading", "placeHolder", {
close: true, // Close windows after tag select
block : "data-original",
callback: function ( query, match, mismatch ) {

// save query to localStorage
localStorage.setItem('ftquery', JSON.stringify(query));

...

}
});

// retrieve query from localStorage
if (localStorage.getItem('ftquery')) {
ft.trigger(JSON.parse(localStorage.getItem('ftquery')));
}

关于jquery 如何使用 filtrify 插件在页面重新加载后保留设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17319744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com