尝试执行127.0.0.1 localhost
127.0.1.1 jordanism
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
功能,以便保存addToWishlist
值boolean
true/false
切换localStorage
而不是{ {1}} jQuery。我将其保存到.addClass
,因此如果用户刷新页面,它仍会保存已保存的项目。
如何根据localStorage
中保存的值正确修正addClass
切换?
localStorage true/false
<button onclick="wishList()" class="btn btn-default wishlist"><i class="fa fa-heart" aria-hidden="true"></i> Add to wishlist</button>
答案 0 :(得分:3)
您可以使用条件toggleClass()
:
$(this).find('.fa').toggleClass('some-class', !wishlistItems);
希望这有帮助。
答案 1 :(得分:2)
更短的方法是使用toggleClass
,它可以将布尔值作为第二个参数:
$(this).find('.fa').toggleClass('add-to-wishlist', !wishlistItems);
答案 2 :(得分:2)
很多答案都在谈论使用toggleClass()
,这很好 - 但这不是你真正的问题。
您正在使用$(this)
尝试查找元素,但this
未引用您认为引用的内容。在这个例子中,它是wishList()
函数的范围 - 而不是被单击的元素。
将event
添加到您的onclick事件中;
<button onclick="wishList(event)" ...>...</button>
然后,对于wishList()
函数,请使用event.target
来引用所单击的元素;
function wishList(event) {
var element = event.target;
localStorage.setItem('wishlists', !addToWishlist);
$(element).find('.fa').toggleClass('add-to-wishlist', !addToWishlist);
}
要在加载页面时添加类,只需从本地存储中获取数据,然后根据需要添加类。
但是,由于您需要直接引用元素而不是基于上述事件 - 最好总是直接引用该元素。
例如,只需在$(document).ready()
函数中包含此内容;
var lsWishList = localStorage.getItem('wishlists');
if(lsWishList == true) {
$(".wishlist").find('.fa').addClass('add-to-wishlist');
}
关于什么是真的
的说明使用此比较时要小心。字符串值将返回为TRUE(使用==
) - 并且由于本地存储只能可靠地用于存储字符串,因此您可能需要重新考虑如何存储该数据。
答案 3 :(得分:0)
尝试使用jquery&#39; s toggleClass
$(this).find('.fa').toggleClass('add-to-wishlist');
方法将更改为
function wishList()
{
localStorage.setItem('wishlists', !(addToWishlist=="true"));
$(this).find('.fa').toggleClass('add-to-wishlist');
}
或将状态添加到toggleClass
var addToWishlist = localStorage.getItem('wishlists');
function wishList()
{
addToWishlist = !( addToWishlist == "true" || addToWishlist == true );
localStorage.setItem('wishlists', addToWishlist );
$(this).find('.fa').toggleClass('add-to-wishlist', addToWishlist );
}
答案 4 :(得分:0)
wishlistItems
总是返回false,因为它声明并在函数外部分配
在将数据分配到wishlistItems = localStorage.getItem('wishlists')
localStorage
var wishlistItems = localStorage.getItem('wishlists');
var addToWishlist = false;
function wishList() {
addToWishlist = !addToWishlist;
localStorage.setItem('wishlists', addToWishlist);
wishlistItems = localStorage.getItem('wishlists')
$(".wishlist").find('.fa').toggleClass('add-to-wishlist');
}
根据评论更新了答案
根据 This link ,我们无法将布尔值保存到Localstorage
function wishList(onload) {
var addToWish = (localStorage.getItem('wishlists') == "true");
var wishlistItems = (onload)?addToWish:!addToWish;
localStorage.setItem('wishlists', wishlistItems);
$(".wishlist").find('.fa').addClass('add-to-wishlist');
if(wishlistItems === false){
$(".wishlist").find('.fa').removeClass('add-to-wishlist');
}
}
$(function(){
wishList(true);
})
也可以调用相同的函数onload。
wishList(true)
传递一个变量以保留愿望清单值onlaod。
<强> updated working example demo 强>