我使用javascript&动态添加/删除元素jQuery的。出于某种原因,我的内部for循环没有退出。计数器继续爬过数组长度,并继续添加元素,直到浏览器崩溃。在Firefox中调试时,调试器groupList[i].length
会显示正确的值。
内部循环永远不会返回false的任何想法?
var $j = jQuery.noConflict();
// array of arrays
var groupList = [];
groupList[groupList.length] = ["Japan", "Honda", "Toyota", "Nissan"];
groupList[groupList.length] = ["America", "Ford", "Dodge", "Chevrolet"];
// loop that creates a radio button from the first element in each array
for (var i = 0; i < groupList.length; ++i) {
$j("#groupBtns").append("<label class=\"btn btn-primary active\" id=\"btn" +
groupList[i][0] + "\"><input type=\"radio\">" + groupList[i][0] + "</label>");
}
// function to add second group of radio button for remaining elements in selected array
function groupClick(group) {
for (var i = 0; i < groupList.length; ++i) {
if (group == groupList[i][0]) {
// -- this is the infinite loop -- //
for (var o = 1; 0 < groupList[i].length; ++o) {
$j("#subGroupBtns").append("<label id=\"btn" + groupList[i][o] +
"\" class=\"btn btn-primary\"><input type=\"radio\">" +
groupList[i][o] + "</label>");
}
}
}
}
// event listener
$j("#groupBtns").on('click', function (e) {
groupClick($j(e.target).text())
});
注意:数组的长度并不总是相同,所以我不能在循环中使用静态终止符。
答案 0 :(得分:4)
你有一个错字:
for (var o = 1; 0 < groupList[i].length; ++o) {
您正在执行0 < groupList[i].length
,如果有长度,则始终为真。
应该是:
for (var o = 1; o < groupList[i].length; ++o) {