因此,我试图结合此处在stackoverflow上发布的三个问题的答案; Save current state after jquery click function,Save data to local storage和HTML5 local storage save .toggleClass。我想做的是使用jQuery中的.one()
在两个类onclick
之间切换。然后在切换类别之后。
我想保存最后添加的课程。到目前为止,我的代码如下:
jQuery
$(".post-tag").one('click', function() {
$(this).find('i').toggleClass('fa-meh fa-smile-beam text-warning text-success');
var likeState = $(this).find('i').hasClass('fa-smile-beam');
localStorage.setItem('liked', likeState);
var likedStorage = localStorage.getItem('liked');
if(likedStorage && $(this).find('i').hasClass('fa-smile-beam')) {
$(this).find('i').removeClass('fa-meh')
}
});
HTML
<div class="post-tag-wrapper">
<div class="post-tag shadow">
<i class="far fa-meh text-warning"></i>
</div>
</div>
我该如何实现?
注意::如果将类添加到
Field
中,我知道这是可行的。Object
;例如使用MongoDB
;默认为fa-meh
,并且onclick
使用某些AJAX
会将Field
中的Object
更新为fa-smile-beam
。但这是使用LocalStorage
所必需的。注意: :根据MDN,LocalStorage违反了政策决策,因此 这不是保存用户交互的做法。
答案 0 :(得分:1)
好的,您可以执行以下操作。起点的主要问题是您不能在同一功能中进行操作。您将需要两个单独的功能。
来回切换状态。我建议使用.on bind方法而不是.one,除非您不希望用户能够撤消其操作。
在加载文档时,除非有其他设置按钮正确状态的方法,否则必须设置状态,该状态保存在按钮的本地存储中。
< / li>HTML
<button class="post-tag" id="some-unique-id">
<i class="fa-meh"></i> Like
</button>
JavaScript
// This will make sure that the state is toggled on user click
// The user can click back and forth, and the state will be saved each time
$(".post-tag").on('click', e => {
const $elm = $(e.currentTarget);
// If you have more than one button you'll need unique IDs for them to make this work
const uniqueId = $elm.attr('id');
const $i = $elm.find('i');
$i.toggleClass('fa-meh fa-smile-beam text-warning text-success');
const likeState = $i.hasClass('fa-smile-beam');
localStorage.setItem(`likeState-${id}`, likeState);
});
// To persist the change you'll have to run this on page load as well
$( document ).ready(function() {
const $postTags = $('.post-tag');
$postTags.each((elm) => {
const $elm = $(elm);
const uniqueId = $elm.attr('id');
const $i = $elm.find('i');
// Now you apply the state stored in local sotrage to your buttons.
const likedStorage = localStorage.getItem(`likeState-${id}`);
if(likedStorage && $i.hasClass('fa-smile-beam')) {
$i.removeClass('fa-meh')
}
});
});