【问题标题】:How to save dynamically added checkbox value in localStorage?如何在localStorage中保存动态添加的复选框值?
【发布时间】:2016-03-19 06:13:28
【问题描述】:

我想动态保存我的复选框值。当我检查一个特定的复选框时,所有复选框都被选中。使用目标但没有工作。有任何想法吗? JSFIDDLE

 var data = localStorage.getItem("checkbox");
    if (data) {
       $("input[name='checkbox-name']").attr("checked", "checked");
    }
    
  $(document).on('change', "input[name='checkbox-name']", function (e) {
     var target = $(e.target );
    if (target.is(":checked")) {
        localStorage.setItem("checkbox", 1);
    } else {
         localStorage.removeItem("checkbox");
    }
});

【问题讨论】:

  • 您的复选框是否有不同的名称?您只是将“复选框”1 保存到本地存储,而不是任何标识符。
  • 不,复选框只有 id 和 name。使用的名称因为 id 是唯一的 @CanCelik
  • 您需要使用这些唯一 ID 保存复选框的状态,以便获得正确的。
  • 已经做了但没用

标签: jquery checkbox local-storage


【解决方案1】:

我的建议是基于删除 ID 并避免单独保存复选框状态:

我更新了你的Fiddle

$(document).on('click', '.delete', function () {
  var parent = $(this).parent();
  parent.remove();

  var list = $("#list").html();
  localStorage.setItem("list", list);
  return false;
});

$(document).on('change', "input[name='checkbox-name']", function (e) {
  if ($(this).prop('checked')) {
    $(this).attr('checked', 'checked');
  } else {
    $(this).removeAttr('checked');
  }
  var list = $("#list").html();
  localStorage.setItem("list", list);
});

$(function () {
  if (localStorage.getItem('list')) {
    $('#list').html(localStorage.getItem('list'));
  }

  $("#add").click(function () {
    var userList = $('#textarea').val();
    $('#textarea').val('');
    var newitem = '<p>' + '<input type="checkbox" name="checkbox-name"/> ' + userList + '<input type="submit" value="X" class="delete"/></p>';
    $('#list').append(newitem);

    var list = $("#list").html();
    localStorage.setItem('list', list);
    return false;
  });
});
<script src="http://code.jquery.com/jquery-1.12.1.min.js"></script>

<input type="text" id="textarea" placeholder="Write here..."/>
<button id="add">Add</button>

<div id="list"></div>

【讨论】:

  • 其实我试过和你一样,但我的代码不起作用。谢谢。
【解决方案2】:

使用其唯一 ID 保存您的复选框。

$('input:checkbox').on('change', function(e) {
     var checkboxId = $(this).attr('id');
     if ($(this).is(":checked")) {
       localStorage.setItem(checkboxId, 1);
     } else {
       localStorage.removeItem(checkboxId);
     }
});

然后你可以检索它:

for (var i = 0, len = localStorage.length; i < len; i++) {
    var key = localStorage.key(i);
    var value = localStorage[key];
    if (value == 1) {
      $('#' + key).attr("checked", "checked");
    }
}

这里是 JSFiddle https://jsfiddle.net/hc09LpfL/2/

无论您是动态创建复选框还是手动创建复选框,它们都有 id。

在您的小提琴中,这是生成复选框的代码。我猜你不理解这部分,因为你为它们分配了相同的 id 和 name。

var newitem = '<p>' + '<input type="checkbox" name="checkbox-name" id="checkbox"/> ' + userList + '<input type="submit" value="X" id="delete"  class="delete"/></p>';

【讨论】:

  • 在您的 JSFiddle 中,所有复选框都具有相同的 id。我刚刚更新了我的代码并为您包含了一个 JSFiddle。它有效!
  • 是的,谢谢这个工作,但我动态添加复选框,所以对我不起作用
  • 为什么它不起作用?您只需要为复选框提供不同的 ID,而不是为它们提供相同的 ID。
猜你喜欢
  • 2014-07-31
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
相关资源
最近更新 更多