【问题标题】:How to get the values of multiple JSON arrays using checkboxes?如何使用复选框获取多个 JSON 数组的值?
【发布时间】:2020-01-31 05:02:00
【问题描述】:

HTML 和 JS

<div class="form-group form-inline text-center">
  <label for="select_category">Select Category</label>&emsp;
  <select class="custom-select" id="select_category" style="width: 500px;" onchange="listcatcb();">
    <option selected></option>
  </select>
</div>
<div class="container" id="cats">
  <div class="form-check" id="catrbs"> </div>
  <button class="btn btn-outline-secondary" onclick="nextcats();">Click Next!</button>
</div>
getallcategory();

function getallcategory() {
  var link = 'allcat.json';
  $.post(link).done(function (data) {
    data2 = JSON.stringify(data);
    var obj = jQuery.parseJSON(data2);
    for (var i = 0; i < obj.length; i++) {
      $("#select_category").append('<option value="' + obj[i].name + '">' + obj[i].name + '</option> ')
    }
  });
}

function listcatcb() {
  selcat = document.getElementById("select_category").value;
  var link = 'allcat.json';
  $.post(link).done(function (data) {
    data2 = JSON.stringify(data);
    var obj = jQuery.parseJSON(data2);
    for (var i = 0; i < obj.length; i++) {
      if (obj[i].name == selcat) {
        for (var j = 0; j < obj.length; j++) {
          $("#catrbs").append('<input class="form-check-input catcbs" type="checkbox" id="' + obj[i].siblings[
              j].name + '" value="' + obj[i].siblings[j].name + '"><label class="form-check-label" for="' +
            obj[i].siblings[j].name + '">' +
            obj[i].siblings[j].name +
            '</label><br/>')
        }
      }
    }

  });
}

function nextcats() {
  var link = 'allcat.json';
  var checkedValue = $('.catcbs:checked').val();;
  $.post(link).done(function (data) {
    data2 = JSON.stringify(data);
    var obj = jQuery.parseJSON(data2);

    for (var i = 0; i < obj.length; i++) {
      if (obj[i].name == selcat) {
        for (var j = 0; j < obj.length; j++) {

          if (obj[i].siblings[j].name == checkedValue) {
            for (var k = 0; k < obj.length; k++) {
              console.log(obj[i].siblings[j].siblings[k].name);
            }
          }
        }
      }
    }
  });
}

allcat.json


[ { "id"       : "47"
  , "name"     : "Women"
  , "parent"   : "0"
  , "status"   : "Enabled"
  , "itemcount": 44
  , "siblings": 
    [ { "id"       : "87"
      , "name"     : "Personal Care Appliances"
      , "parent"   : "47"
      , "status"   : "Enabled"
      , "itemcount": 2
      , "siblings": 
        [ { "id"       : "88"
          , "name"     : "Hair Dryers"
          , "parent"   : "87"
          , "status"   : "Enabled"
          , "itemcount": 2
          , "siblings" : [] 
      } ] } 
    , { "id"       : "127"
      , "name"     : "Jewellary"
      , "parent"   : "47"
      , "status"   : "Enabled"
      , "itemcount": 41
      , "siblings": 
        [ { "id"       : "128"
          , "name"     : "Artificial Jewellary"
          , "parent"   : "127"
          , "status"   : "Enabled"
          , "itemcount": 41
          , "siblings" : [] 
} ] } ] } ] 

在这段代码中,如果我一次选择 2 个复选框,则意味着我只得到第一个 JSON 值的输出...
如果我取消选中一个,则意味着我正在获取其各自的值...
我的意思是,例如,如果我从一个类别中选择女性,那么我将获得 2 个复选框,分别是 1.personal care Appliance 和 2.jewellery。
如果我一次选择多个复选框意味着我只得到吹风机(个人护理用品中的价值),但我没有得到人造珠宝(珠宝中的价值)
如果我一次选择一个意味着我得到了适当的结果,请帮助我解决这个错误...
我卡在这里了。

【问题讨论】:

  • 能否为这个示例创建一个 jsFiddle,以便调试。
  • jsfiddle.net/Manoj07/6frs3n09/10 亲爱的先生,这里是 jsfiddle 链接...在此链接中,我的程序在那里...有很多类别,例如男人,女人,家具,电子产品...在JSON 我只给了女性数组......其中,如果我从选择选项中选择女性,1.个人护理用品和珠宝会显示在复选框中,如果我同时选择(多个)个人护理用品和珠宝,那么它会显示只有第一个数组的(个人护理用品)值(吹风机)。如果我取消选中任何一个并单击按钮意味着我得到了正确的结果。但不是在多个
  • 兄弟验证小提琴和分享,它不起作用兄弟
  • 是的先生...只有我说...我需要男性、女性、电子产品等的列表,在选择选项中...在那个 Json 中,我只给出了女性 Json 数组...单个选项对我来说也足够了...我将在这里修改代码...如果我选择女性意味着我应该将个人护理用品和珠宝作为复选框..如果我选择多个复选框一次意味着我应该在控制台中获取 Json 数组中的所有值
  • 你来自喀拉拉邦吗?请检查答案

标签: javascript jquery html arrays json


【解决方案1】:

你在for loop中犯了几个错误,请检查更新后的代码sn-p。

这里for (var j = 0; j &lt; obj[i].siblings.length; j++)你错过了添加siblings

这里var checkedValue = $('.catcbs:checked').map(function(){ return $(this).val(); }).get();,这里你只得到一个值,更新它以获取数组中的值。

如果您有任何困惑,请仔细阅读并告诉我。

const jsonData = 
[ 
   { 
      "id":"47",
      "name":"Women",
      "parent":"0",
      "status":"Enabled",
      "itemcount":44,
      "siblings":[ 
         { 
            "id":"87",
            "name":"Personal Care Appliances",
            "parent":"47",
            "status":"Enabled",
            "itemcount":2,
            "siblings":[ 
               { 
                  "id":"88",
                  "name":"Hair Dryers",
                  "parent":"87",
                  "status":"Enabled",
                  "itemcount":2,
                  "siblings":[ 

                  ]
               }
            ]
         },
         { 
            "id":"127",
            "name":"Jewellary",
            "parent":"47",
            "status":"Enabled",
            "itemcount":41,
            "siblings":[ 
               { 
                  "id":"128",
                  "name":"Artificial Jewellary",
                  "parent":"127",
                  "status":"Enabled",
                  "itemcount":41,
                  "siblings":[ 

                  ]
               }
            ]
         }
      ]
   }
];
function getallcategory() {
  var link = jsonData;
    for (var i = 0; i < link.length; i++) {
      $("#select_category").append('<option value="' + link[i].name + '">' + link[i].name + '</option> ')
    }

}

function listcatcb() {
  selcat = document.getElementById("select_category").value;
  var obj = jsonData;
    for (var i = 0; i < obj.length; i++) {
      if (obj[i].name == selcat) {
        for (var j = 0; j < obj[i].siblings.length; j++) {
          $("#catrbs").append('<input class="form-check-input catcbs" type="checkbox" id="' + obj[i].siblings[
              j].name + '" value="' + obj[i].siblings[j].name + '"><label class="form-check-label" for="' +
            obj[i].siblings[j].name + '">' +
            obj[i].siblings[j].name +
            '</label><br/>')
        }
      }
    }

}

function nextcats() {
  var obj = jsonData;
  var checkedValue = $('.catcbs:checked').map(function(){
  return $(this).val();
  }).get();
  var selectedItem='';
    for (var i = 0; i < obj.length; i++) {
      if (obj[i].name == selcat) {
        for (var j = 0; j < obj[i].siblings.length; j++) {
          if (checkedValue.indexOf(obj[i].siblings[j].name) != -1) {
            for (var k = 0; k < obj.length; k++) {
              selectedItem += `<p>${obj[i].siblings[j].siblings[k].name}</p>`;
            }
          }
        }
      }
    }
    $('#selected-item').html(selectedItem)
}
getallcategory();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<div class="form-group form-inline text-center">
  <label for="select_category">Select Category</label>&emsp;
  <select class="custom-select" id="select_category" style="width: 500px;" onchange="listcatcb();">
    <option selected></option>
  </select>
</div>
<div class="container" id="cats">
  <div class="form-check" id="catrbs"> </div>
  <button class="btn btn-outline-secondary" onclick="nextcats();">Click Next!</button>
</div>
<div class="container" id="selected-item">
</div>
</div>

【讨论】:

  • 其实……曼加拉普里亚人……卡纳塔克邦和喀拉拉邦的边界……
  • @ManojHM 好兄弟,我来自喀拉拉邦。希望你能得到答案,不要忘记接受答案并点赞:)。继续编码兄弟
  • 谢谢Ettan...现在断电...一旦上电会检查代码...然后我会再次ping你...谢谢Ettan...
猜你喜欢
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 2019-08-16
  • 2015-02-11
  • 2017-09-11
  • 1970-01-01
相关资源
最近更新 更多