Переменные переменные в javascript внутри цикла

var x = 1;
var ctr = 5;
while (x<=ctr){
    var ss_+x = $('input[name=IDMenu_'+x+']').val();
    x++;
}

Как вы можете видеть выше, у меня есть цикл, который будет перебирать поля ввода с именем IDMenu_1 до IDMenu_5. Я попытался сделать сами имена переменных переменными, используя синтаксис var ss_+x; однако это неверно и не работает.

Если бы я не использовал цикл, я бы сделал следующее:

var ss_1 = $('input[name=IDMenu_1]').val();
var ss_2 = $('input[name=IDMenu_2]').val();
var ss_3 = $('input[name=IDMenu_3]').val();
var ss_4 = $('input[name=IDMenu_4]').val();
var ss_5 = $('input[name=IDMenu_5]').val();

Можно ли сделать это в цикле?

var ss_+x - что это должно делать? Вы смотрели на консоль ошибок своего браузера во время выполнения вышеуказанного кода?
Nico Haase 10.09.2018 10:55

просто сделайте var массивом и вставьте в него значения. var ss = []; - затем ss.push($('input....val());

Jeff 10.09.2018 10:55

Возможный дубликат Переменные переменные в JavaScript

Scoots 10.09.2018 11:48
1
3
81
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы пытаетесь создать переменные с динамическими именами, чтобы можно было использовать window[variable_name].

ЗАМЕТКА: IMO вместо этого вы можете использовать массив значений.

var x = 1;
var ctr = 5;

while (x <= ctr) {
  window["ss_" + x] = $('input[name=IDMenu_' + x + ']').val();
  x++;
}

console.log(ss_1, ss_2, ss_3, ss_4, ss_5);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input name="IDMenu_1" value="10">
<input name="IDMenu_2" value="20">
<input name="IDMenu_3" value="30">
<input name="IDMenu_4" value="40">
<input name="IDMenu_5" value="50">

Это работает, и я предпочитаю этот, чем использование массива, я не знаю, что лучше, но для меня это проще, чем использование массива. Спасибо.

ICG DEVS 10.09.2018 11:08

Добро пожаловать, рад, что смог помочь.

Zakaria Acharki 10.09.2018 11:14

@ICGDEVS Кроме того, вы можете подумать о том, чтобы не помещать все свои переменные в глобальную область видимости, а создать только один объект ss, который будет содержать ваши свойства, выполнив следующие действия: var ss = {}; while(...){ ss[x] = ...};, а затем обращайтесь к ним с помощью ss.1, ss.2, ...

Logar 10.09.2018 11:47

Было бы лучше сделать var массивом, а затем помещать в него элементы.

var x = 1;
var ctr = 5;
var ss = [];
while (x<=ctr){
   ss.push($('input[name=IDMenu_'+x+']').val());
   x++;
}  

Тогда у вас будут значения в

console.log(ss[0]);
console.log(ss[1]);
// ...

Другие вопросы по теме