【问题标题】:Have Checkbox Stay Checked Throughout Session在整个会话期间保持选中复选框
【发布时间】:2017-05-23 02:18:13
【问题描述】:

我有一个表格,我可以在其中选中一个复选框,它将记录行中的所有内容。页面上有一些搜索功能和其他按钮,所以我想使用会话存储能够在整个刷新过程中保留任何被选中、选中的复选框,直到页面关闭。我从我发现的一个例子中得到了一些东西,但它似乎不起作用。我该如何解决这个问题?

带有复选框的表格列/行的 HTML:

<td class="ui-widget-content"><input type="checkbox" class="check" name="check" id="checkid"></td>

JavaScript:

$(function(){
    var test = sessionStorage.input === 'false'? true: false;
    $('input').prop('checked', test || false);

    $('input').on('change', function() {
    sessionStorage.input = $(this).is(':checked');
    console.log($(this).is(':checked'));
});
});

【问题讨论】:

  • 不确定...我进行了编辑...现在应该是这个样子吗?
  • @Rataiczak24 你找出来 :)
  • 它现在将记录值“true”,但刷新后不会保留任何复选框
  • 似乎测试变量的三元是向后的。编辑:按原样,测试永远不会为空,所以 ||错误的部分很奇怪。 EDIT2:你可以做this.checked = true/false',你不必通过jquery来访问那个对象属性。

标签: javascript jquery html checkbox session-storage


【解决方案1】:

看看这个:

var test = sessionStorage.input === 'false'? true: false;

那是什么意思?如果sessionStorage.inputfalse,则返回true,否则返回false

因此,当您选中复选框时,它会设置为 true,根据上述逻辑,因为它不是 false - 测试被评估为 false

解决方案:

var test = sessionStorage.input === 'true';

如果会话也是 true,这会将 test 设置为 true

您也可以将$('input').prop('checked', test || false); 更改为:

$('input').prop('checked', test);

|| false 是不必要的。甚至更好/更短:

$('input').prop('checked', sessionStorage.input === 'true');

然后你根本不需要test 变量。

至于您的问题“我怎样才能使这个工作适用于单个复选框”:您可以使用复选框 id 例如:

// save the individual checkbox in the session inside the `change` event, 
// using the checkbox "id" attribute
var $el = $(this);
sessionStorage[$el.prop('id')] = $el.is(':checked');

然后,当你刷新页面时:

$(':checkbox').each(function() {
    // Iterate over the checkboxes and set their "check" values based on the session data
    var $el = $(this);
    $el.prop('checked', sessionStorage[$el.prop('id')] === 'true');
});

所以它应该是这样的:

$(function(){
    $('input:checkbox').each(function() {
        // Iterate over the checkboxes and set their "check" values based on the session data
        var $el = $(this);
        $el.prop('checked', sessionStorage[$el.prop('id')] === 'true');
    });

    $('input:checkbox').on('change', function() {
        // save the individual checkbox in the session inside the `change` event, 
        // using the checkbox "id" attribute
        var $el = $(this);
        sessionStorage[$el.prop('id')] = $el.is(':checked');
    });
});

Working solution - 由于安全限制,它不支持 sessionStorage,因此无法使用 stack-sn-ps。

【讨论】:

  • 好的,亲爱的!这似乎有效!只有另一个问题是我怎样才能使这个工作适用于单个复选框?现在,如果我选择一个或取消选择一个,它会选择/取消选择所有这些
  • 我使用您的代码将我的 JS 代码更新为我现在拥有的...如果它放置正确,请告诉我,因为现在我仍然有问题
  • @Rataiczak24 否 - 将 $(':checkbox').each(function() { .... }) 替换为 var test = sessionStorage.input === 'true'; 和下一行 ($('input').prop('checked', test);)
  • 完美!非常感谢!
  • 绝对!谢谢
猜你喜欢
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
相关资源
最近更新 更多