javascript - 从本地存储中检查时清除检查的 li 元素

标签 javascript jquery css html

我在本地存储中有一个要打印到浏览器的数组。

我制作了一个 jsfiddle 来展示我的代码结构 here.

我正在尝试使整个 div 可点击。换句话说,整个 div 在单击时会改变颜色,但我隐藏了实际的复选框。

然后我添加了一个按钮,用于从本地存储的数组中清除所有选中的元素。

完成后 它几乎正在工作。如果没有剩余,它只会重新加载数组中的关键字。所以如果它只显示一个。然后我检查它,它会重新加载。但是如果有两个,我检查它,它会清除我点击的那个。知道为什么它总是保留一个吗?

我是这样加载关键词的,

$('#keyWords').prepend('<li class="list-group-item" data-style="button"><input id="'+localArray[i]+'" class="check" name="check" type="checkbox"><label for="'+localArray[i]+'">'+localArray[i]+'</label></li>'); 

然后我尝试删除这样的关键字,

// Allows user to remove keywords from the locaStorage
$('#clearChecked').click(function() {
  currentArray = [];
  $('.check').each(function() {
    var $curr = $(this);
    if (!$curr.is(':checked')) {
      var value = $curr.parent().text();
      currentArray.push(value);
      localStorage.setItem('keyWords', JSON.stringify(currentArray));
      loadKeyWords();
    } else {
      $curr.parent().remove();
    }
  });

通过使用 css 删除复选框,单击 li 时它不会变为事件状态吗?这是我能想到为什么这不起作用的唯一原因......在我使整个 div 可点击之前它正在工作。

为了以防万一,这里是我添加的 css。

label {
display:block;
line-height:40px;
height:40px;
width: 520px;
border-radius:40px;
-webkit-font-smoothing: antialiased; 
margin-top:10px;
font-family:Arial,Helvetica,sans-serif;
color:gray;
text-align:center;
}

input[type=checkbox] {
display: none;
}

input:checked + label {
color: #F00;
}

input:checked + label:before {
content: "\2713";
}

最佳答案

提供的 fiddle 不起作用,因为您没有向我们提供函数 loadKeyWords()。

话虽如此,看起来您正在将整个列表重写到每个循环内的存储中。这没有意义,因为你想将所有选项加载到数组中,然后在循环一次后设置值。

我不确定这是否会帮助您更接近于找到问题的真正根源。

关于javascript - 从本地存储中检查时清除检查的 li 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34700502/

相关文章:

html - 背景视频大小问题

javascript - 鼠标悬停时继续调用函数

javascript - Ember - 多对多关系数据未更新

javascript - 如何在不导入模块的情况下运行它?

javascript - ajax 请求调用以错误结束

html - 如何动态调整标题 Logo 的大小?

javascript - 如果 getOrCreate 是一种反模式,我该如何避免呢?

javascript - 动画期间触发更新

javascript - 使用向上和向下箭头进行自动完成搜索

我网站的 CSS 在 chrome 中损坏