【问题标题】:Storing checkbox value in local storage将复选框值存储在本地存储中
【发布时间】:2014-03-31 07:08:12
【问题描述】:

我有一个复选框,其值 $row['uid'] 我想使用 javascript 或 jquery 将其存储在本地存储中。当用户“取消选中”复选框时,应从本地存储中删除该值

这是我的html:

<form> Favorites <input type="checkbox" class="favorite" value="'.$row['uid'].' onclick='.fave.add();'"></form>

这就是我目前在 javascript 中的本地存储。我不太确定应该如何添加和删除值$row['uid']

    var fave = fave || {};
    var data = JSON.parse(localStorage.getItem("favorite"));
    data = data || {};
            var fave = fave || {};
            var data = JSON.parse(localStorage.getItem("favorite"));
            data = data || {};
            $(function () {
                var data = localStorage.getItem("favorite");

                if (data !== null) {
                    $("input[name='favorites']").attr("checked", "checked");
                }
            });
            $("input[name='favorites']").click(function () {
                if ($(this).is(":checked")) {
                localStorage.setItem("favorite", $(this).val());
                } 
                else {
                    localStorage.removeItem("favorite");
                }
            });

非常感谢任何和所有帮助!

【问题讨论】:

  • “当用户刷新页面时”是什么意思?每次页面加载时,该值都会存储在本地存储中。

标签: javascript jquery checkbox local-storage


【解决方案1】:

localStorage 有两个主要功能,getItemsetItem。对于setItem,您传入一个键和一个值。如果您再次写入该键,它将重写该值。因此,在您的情况下,如果选中了一个框,您将执行localStorage.setItem("checkbox_value", true),而当未选中该框时,您将改为传递false。要获取值,您可以像这样使用 jQuery:$(checkbox).is(':checked') 并使用简单的 if-else 子句传入 true 或 false。然后当您重新加载页面时,您可以在 $( document ).ready() 上使用 localStorage.getItem(key) 获取值并使用 Javascript 设置复选框值。

这就是我将如何使用 localStorage 来记住复选框值。

希望我能帮上忙!有什么不清楚的可以问我。

【讨论】:

  • 感谢您的帮助!假设我想存储选中的复选框的所有不同值,我应该怎么做?我在上面添加了一段 sn-p 代码
  • localStorage 只允许您存储字符串。所以你可以做的是使用一个循环来创建一个字符串,其中所有的复选框值都由一些分隔符分隔。例如,如果有四个复选框的值为 true false false true 您的字符串将是 "true\nfalse\nfalse\ntrue" 其中 \n 是分隔符。然后您可以将该字符串存储在 localStorage 中,当您检索它时,您可以将所有值放入一个数组中,如下所示:array = localStorage.getItem(key).split('\n')。然后您可以使用新检索到的数组填充您的复选框。询问是否有任何需要澄清的地方
  • 谢谢-考虑到$row['uid'] 是一个int,我在上面发布的编辑代码是否有意义?
  • 是的,你的方向是正确的。但我不确定如果未选中复选框,为什么要调用 removeItem 。如果你设置一个不同的int不是更好吗?比如 1 = 选中,0 = 未选中?
【解决方案2】:

Here's an example 让您朝着正确的方向前进:

var boxes, arr;

// This function loads the array and then checks the uid of each checkbox
// against it.

function checkBoxes() {
  arr = loadBoxArray();
  $.each($('input[type=checkbox]'), function (i, el) {
    if (arr.indexOf(i) > -1) {
      $(this).prop('checked', true);
    } else {
      $(this).prop('checked', false);
    }
  });
}

// If the localStorage item is available, load it into an array
// otherwise set a default array and save it to localStorage

function loadBoxArray() {
  if (localStorage.getItem('boxes')) {
    arr = loadBoxArray();
  } else {
    arr = [0, 2];
    saveBoxArray(arr);
  }
}

// Save the array to localStorage    

function saveBoxArray(arr) {
  localStorage.setItem('boxes', JSON.stringify(arr));
}

// On page load check the boxes found in localStorage

checkBoxes();

// Clicking a checkbox will update the checkbox array which is then saved to localStorage

$('input[type=checkbox]').click(function () {
  var arr = $.map($('input[type=checkbox]:checked'), function (el) {
    return $(el).data('uid');
  });
  saveBoxArray(arr);
});

【讨论】:

    【解决方案3】:

    如果您希望复选框状态在页面刷新后保持不变并且您不介意使用 jQuery:

    http://jsfiddle.net/9L2Ac/

    $(function () {
        var data = localStorage.getItem("favorite");
    
        if (data !== null) {
            $("input[name='favorites']").attr("checked", "checked");
        }
    
    
    });
    
    
    
    $("input[name='favorites']").click(function () {
    
        if ($(this).is(":checked")) {
            localStorage.setItem("favorite", $(this).val());
        } else {
            localStorage.removeItem("favorite");
        }
    
    });
    

    【讨论】:

    • 如果我有多个要存储在 localStorage 中的值,这是否有效?不幸的是,该功能似乎不起作用
    • 你可以使用 JSON.stringify(obj) 。
    • 您还可以将每个值存储在单独的插槽中(通过复选框名称或 id)
    猜你喜欢
    • 1970-01-01
    • 2017-07-20
    • 2018-12-18
    • 2016-04-22
    • 2012-05-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多