jQuery 将 .each() 和 .on() 用于表中的复选框 [重复]

Posted

技术标签:

【中文标题】jQuery 将 .each() 和 .on() 用于表中的复选框 [重复]【英文标题】:jQuery Using .each() with .on() for Checkbox's in Table [duplicate] 【发布时间】:2021-01-24 10:06:29 【问题描述】:

我正在尝试这样做,因此单击表格行会选中一个复选框,并使用 localStorage 保存该值,以便在刷新页面时之前选中的复选框保持选中状态。

下面的代码完成了这两个任务。但是,它们一起导致先前选中的复选框(来自 localStorage)不再通过单击该行来切换,并且需要您直接单击该框。

<script>

$("tr").each(function(e)
    $("input[type='checkbox']", this).each( function() 
        if (localStorage.getItem(this.value) == 'true') 
            $(this).prop("checked", true);
    );
);

$("tr").on("click", function(e)
    $("input[type='checkbox']", this).each( function() 
        $(this).attr('checked', !$(this).attr('checked'));
        localStorage.setItem(this.value, this.checked);
    );
);

</script>

使用的版本:bootstrap-4.5.2、jquery-3.5.1.slim

【问题讨论】:

尝试prop 方法而不是attr,就像您在$("tr").each 中所做的那样 特别是这个答案:***.com/a/19630917/2181514 - 你必须使用.prop 用于 jquery 3.5.1 中的复选框 【参考方案1】:

$(this).attr('checked') 将始终返回一个字符串(参见 .attr) 文档)。因此,对其执行! 将始终导致false除非它是一个空字符串,但在您的代码中不会发生)。

简化为

this.checked = !this.checked;

【讨论】:

以上是关于jQuery 将 .each() 和 .on() 用于表中的复选框 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax添加元素事件无效,each,on函数参考

jQuery 在 .ajax 成功时继续下一个循环(.each)

jquery 关于循环判断的问题

Jquery - 将 .each() 与变量和 IF 语句一起使用

Jquery on drop remove helper

iOS 上 jQuery.each() 和 Underscore.each() 的神秘失败