【发布时间】:2020-05-18 20:22:10
【问题描述】:
在下面的代码中,我想获得女性的价值,即我得到 1.Personal care Appliance 和 2. Jewelry... 但之后如果我选中任何复选框,则会出现错误“未捕获的类型错误:无法读取未定义的属性‘名称’”,如果我选择多个复选框,那么我应该获取所有复选框的值。
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":[
]
}
]
}
]
}
]
html
<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> 
<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>
javascript
function getallcategory() {
$.getJSON("allcat.json", function (json) {
var link = json;
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;
$.getJSON("allcat.json", function (json) {
var obj = json;
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() {
$.getJSON("allcat.json", function (json) {
console.log(json); // this will show the info it in firebug console
var obj = json;
console.log(obj);
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();
【问题讨论】:
-
您好,我在本地运行您的代码,但没有收到您上面提到的任何错误。它工作正常。尝试使用
['name']而不是.name也许会有所帮助。 -
Hai manoj,您的控制台显示 CORS 错误,由于 chrome 安全原因,我们不应该从本地文件中获取数据。您需要从 js 文件中导出数据并添加到 html 文件中。例如将您的 json 数据作为
var jsonData = [...]放入.js文件中,并将该.js文件添加到您的 html 文件中,例如添加external js文件。然后您可以在其他 js 文件中访问这些变量,例如在您的script.js文件中,您可以通过调用变量jsonData来获取json data。 -
etta.. 我也试过了,但我又遇到了同样的错误.. 我给了脚本 src 并将我的 json 数组保存为 .js 扩展名
标签: javascript jquery html json ecmascript-6