Если я правильно читаю ваши требования и код, в вашем выражении switch вы передаете и ссылку на соответствующий массив, и ожидаемую длину этого массива - вам не нужен второй параметр, потому что все массивы JavaScript имеют .length
свойство .
Вы не хотите использовать .slice()
, чтобы получить отдельные значения из массива, потому что это возвращает новый массив, скопированный из оригинала - просто используйте arrayVariable[index]
чтобы получить отдельный элемент на index
.
Итак, собрав его, попробуйте что-то вроде этого (с вашими существующими определениями массивов):
switch(n){
case 1:
changelabels(bodyplan);
break;
case 2:
changelabels(mouthposition);
// etc.
}
function changelabels(data) {
var i,
lbl;
for (i = 0; i < data.length; i++) {
lbl = document.getElementById("rb" + (i+1) + "lbl");
lbl.innerHTML = data[i];
}
}
Обратите внимание, насколько это прощечем твой код?Я предполагаю, что элементы, которые вы обновляете, имеют идентификатор в формате «rb1lbl», «rb2lbl» и т. Д., Нумерация начинается с 1: я получаю эти идентификаторы, используя (i + 1), потому что индексы массива JavaScript начинаются снуль.Также обратите внимание, что вам даже не нужна переменная lbl
: вы могли бы просто сказать document.getElementById("rb" + (i+1) + "lbl").innerHTML = data[i]
- однако я оставил ее, чтобы у нас было что расширить ниже ...
Внутри вашегоВы, похоже, изменяете метки на наборе элементов (метки переключателей?), по одному на значение в массиве, но вы останавливаетесь, когда у вас заканчиваются элементы массива, что означает, что любые оставшиеся элементы будут по-прежнему содержать значения из предыдущеговыбор (например, если предыдущий выбор был «bodyplan» с 8 вариантами, и вы изменили на «положение рта» только с 5 - вам, вероятно, следует скрыть 3 оставшихся элемента, которые в противном случае продолжали бы отображать последние несколько элементов «bodyplan». В одну сторонусделать это вместо того, чтобы настраивать ваш цикл на основе длины массива, вы можете зациклить элементы, и если текущий элемент имеет индекс за концом массива, скрыть его, что-то вроде этого:
function changelabels(data) {
var i,
lbl,
elementCount = 20; // or whatever your element count is
for (i = 0; i < elementCount; i++) {
lbl = document.getElementById("rb" + (i+1) + "lbl");
if (i < data.length) {
lbl.innerHTML = data[i];
lbl.style.display = "";
} else {
lbl.innerHTML = "";
lbl.style.display = "none";
}
}
}
Если эти элементы являются метками для переключателей (просто предположение, основанное на идентификаторах), то вы также хотели бы скрытьили покажите соответствующие переключатели, но я надеюсь, что вы можете выяснить, как добавить пару строк к вышеупомянутому, чтобы сделать это.
(Как уже упоминалось выше, будьте осторожны, когда число идентификаторов элементов увеличивается с 1, когдаиндексы массива начинаются с 0.)
Если вышеупомянутое не работает, пожалуйста, опубликуйте (хотя бы некоторые) соответствующий HTML - очевидно, я просто должен был догадаться, на что это может быть похоже.