基于this answer我应该使用$.inArray
,因此我会这样做:
var curPostId = $(".my_post_id").attr("data-id");
if($.inArray(curPostId, lines)) {
$('#'+localStorage.getItem('saveButton')).attr('disabled', true);
}
如果我这样做:console.log(curPostId);我得到248
这是正确的。然后,如果我console.log(lines);
,我会[242, 248]
行的定义如下:
var lines = localStorage.getItem("lines") ? JSON.parse(localStorage.getItem("lines")) : [];
但是检查它是否在数组中没有发生,因为它没有被应用$('#'+localStorage.getItem('saveButton')).attr('disabled', true);
这就是我在本地存储上设置daveButton的方法
$(".save_post").on("click", function() {
if (counter >= 2) {
alert('nope');
return;
} else {
$(this).attr("disabled", "true");
localStorage.setItem('saveButton', $(this).attr('id'));
var thisId = $(".my_post_id").attr("data-id");
lines.push(thisId);
localStorage.setItem("lines", JSON.stringify(lines));
}
});
这个问题是对我之前的问题how to keep button state across different pages的跟进,其答案有效,但只是部分解决。
答案 0 :(得分:2)
只需使用Array.includes
方法 - 它不那么令人困惑,更适合您正在寻找的内容,并且不需要jQuery。
if (lines.includes(curPostId)) {
// ...
另请注意,您可以通过直接分配和获取localStorage
点属性来简化语法,例如:
var lines = JSON.parse(localStorage.lines || '[]');
// ...
localStorage.saveButton = $(this).attr('id');
// ...
localStorage.lines = JSON.stringify(lines);
答案 1 :(得分:1)
$ .inArray返回元素的索引,所以会发生什么,你的元素是'0'索引,如果value是0则条件为false
所以你可以使用
if($.inArray(curPostId, lines) !== -1) {
或使用ES6的includes
方法
if (lines.includes(curPostId)) {