【问题标题】:get values from an object and set checkboxes state从对象中获取值并设置复选框状态
【发布时间】:2020-09-22 21:02:48
【问题描述】:

在下面的示例中,我需要第一个复选框为checked,第二个和第三个复选框为unchecked

目前我正在获取所有这些checked

let data = {"admin":"true","nts":"false","chat":"false"};

$('button').on('click', function(){
    $('.bcheck').each(function(){
            let x = $(this).attr('data-x');
            $(this).attr('checked', data[x]);
        });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type='checkbox' class='bcheck' data-x='admin'>
<input type='checkbox' class='bcheck' data-x='nts'>
<input type='checkbox' class='bcheck' data-x='chat'>
<button>CLICK</button>

【问题讨论】:

    标签: javascript jquery checkbox


    【解决方案1】:

    data 对象中的值都是字符串。所以他们都会评估为true。丢失字符串并使其成为布尔值。

    let data = {
      "admin": true,
      "nts": false,
      "chat": false
    };
    
    $('button').on('click', function() {
      $('.bcheck').each(function() {
        let x = $(this).attr('data-x');
        console.log(data[x]);
        $(this).attr('checked', data[x]);
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    
    <input type='checkbox' class='bcheck' data-x='admin'>
    <input type='checkbox' class='bcheck' data-x='nts'>
    <input type='checkbox' class='bcheck' data-x='chat'>
    <button>CLICK</button>

    【讨论】:

    • 实际上我从 ajax 调用中得到了 data,所以这些值是带引号的。如何从结果对象中的值中删除引号?
    【解决方案2】:

    字符串"false" 不是假的(在控制台中尝试!!"false" === true)。您可以将字符串更改为常规布尔值 (false) 吗?

    编辑应该这样做:

    let transformedData = {};
    
    const dataEntries = Object.entries(data).map((entry) => {
      return { [entry[0]]: !(entry[1] === "false") };
    });
    
    for (const entry of dataEntries) {
      transformedData = { ...transformedData, ...entry };
    }
    

    【讨论】:

    • 事实上我从 ajax 调用中得到了 data,所以这些值是带引号的。如何从结果对象中的值中删除引号?
    • 您可以编写一个将"false" 映射到false 的函数:const convertStringToBool = (value) =&gt; !(value === "false") 并循环遍历Object.values(data),在每个值上运行convertStringToBool。当然,这只有在您只期望"true""false" 时才有效——您可能需要处理其他情况
    • 我编辑了我的答案,让我知道这是否适合你
    猜你喜欢
    • 2020-12-23
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多