第一次未调用多选中的 for 循环 javascript/jquery
for loop in multiselect not called first time javascript/jquery
我有一个 multiselect 依赖项,我在其中分别显示城市及其区域。
问题是,函数 getArea 中的两个 for 循环仅在 cities 选项元素的第二个 select 上被调用。
注意:在调试器中它工作正常。我认为这是一个范围问题,我尝试使用 foreach 函数但无济于事。
我已在出现问题的行下方指出。
//Global Variables
var allAreas = new Array();
$(document).ready(function() {
getCities();
$("#sel-city").bind("change", getAreas);
});
//get Cities on reload
function getCities() {
$.getJSON("cities.json", function(json) {
var citySelect = $("#sel-city");
for (var i in json) {
$("#sel-city")
.append($('<option>', {value: json[i].id})
.text(json[i].name));
}
});
}
function getAreas() {
var parentID = $(this).val();
console.log(parentID);
if (allAreas.length == 0) {
$.getJSON("areas.json", function(json) {
for (var i in json) {
allAreas.push(json[i]);
}
});
}
$('option', $("#sel-area")).remove();
var areasByParentID = new Array();
//Loop here
for (var i in allAreas) {
if (allAreas[i].city_id == parentID) {
areasByParentID.push(allAreas[i]);
}
}
console.log(areasByParentID);
//Loop here
for (var k in areasByParentID) {
$("#sel-area")
.append($('<option>', {value: areasByParentID[k].id})
.text(areasByParentID[k].name));
}
}
根据您提供给我们的信息,如果没有示例数据,一切看起来都很好。但是你有一些小错误可能会导致不好的结果。我决定看一下它,进行一些更正并让它与一些示例数据一起正常工作。
你应该注意什么?
- 对数组使用 for 循环而不是 for-in
- 你应该避免 new Array() 操作
- 您应该缓存 jquery 变量以减少站点负载
- 要在站点加载上正确设置区域,您应该只定义初始化函数
这里会出现什么错误?
var a = [];
a[5] = 5;
for (var x in a) {
// Shows only the explicitly set index of "5", and ignores 0-4
}
for-in语句的用途是遍历对象属性,甚至会继承属性。根据您的数据,它可能会给出错误的结果,如我的示例所示。
这里是 jsfiddle 示例数据。
我有一个 multiselect 依赖项,我在其中分别显示城市及其区域。 问题是,函数 getArea 中的两个 for 循环仅在 cities 选项元素的第二个 select 上被调用。
注意:在调试器中它工作正常。我认为这是一个范围问题,我尝试使用 foreach 函数但无济于事。
我已在出现问题的行下方指出。
//Global Variables
var allAreas = new Array();
$(document).ready(function() {
getCities();
$("#sel-city").bind("change", getAreas);
});
//get Cities on reload
function getCities() {
$.getJSON("cities.json", function(json) {
var citySelect = $("#sel-city");
for (var i in json) {
$("#sel-city")
.append($('<option>', {value: json[i].id})
.text(json[i].name));
}
});
}
function getAreas() {
var parentID = $(this).val();
console.log(parentID);
if (allAreas.length == 0) {
$.getJSON("areas.json", function(json) {
for (var i in json) {
allAreas.push(json[i]);
}
});
}
$('option', $("#sel-area")).remove();
var areasByParentID = new Array();
//Loop here
for (var i in allAreas) {
if (allAreas[i].city_id == parentID) {
areasByParentID.push(allAreas[i]);
}
}
console.log(areasByParentID);
//Loop here
for (var k in areasByParentID) {
$("#sel-area")
.append($('<option>', {value: areasByParentID[k].id})
.text(areasByParentID[k].name));
}
}
根据您提供给我们的信息,如果没有示例数据,一切看起来都很好。但是你有一些小错误可能会导致不好的结果。我决定看一下它,进行一些更正并让它与一些示例数据一起正常工作。
你应该注意什么?
- 对数组使用 for 循环而不是 for-in
- 你应该避免 new Array() 操作
- 您应该缓存 jquery 变量以减少站点负载
- 要在站点加载上正确设置区域,您应该只定义初始化函数
这里会出现什么错误?
var a = [];
a[5] = 5;
for (var x in a) {
// Shows only the explicitly set index of "5", and ignores 0-4
}
for-in语句的用途是遍历对象属性,甚至会继承属性。根据您的数据,它可能会给出错误的结果,如我的示例所示。
这里是 jsfiddle 示例数据。