Я создаю простое приложение с рецептами, используя Node / Express. Пользователь получает форму «Новый рецепт» HTML, в которой он может нажать кнопку «Добавить ингредиент» и добавить в форму столько ингредиентов, сколько ему нужно. Используя jQuery, каждый раз при нажатии на значок плюса генерируется новый текстовый ввод для нового ингредиента:
var newIngredient = $('#newIngredient').val();
ingredientCount++;
//give each ingredient a unique name based on count
var ingredientID = "ingredient_" + ingredientCount
// reset input to blank
$("#newIngredient").val("");
// add ingredient to list for user to see or edit.
$("#ingredientsList").append(
'<input class="form-control" type="text" required
name=' + ingredientID + ' value="' + newIngredient + '">')
Каждому добавленному ингредиенту присваивается уникальное имя через счетчик. Это все работает нормально, и когда форма отправлена, я получаю:
{
name: 'Soup',
ingredient_1: 'carrots',
ingredient_2: 'salt',
ingredient_3: 'turnips',
method: 'Throw all these ingredients together and voila, you have a terrible soup.'
}
В бэкэнде я хочу взять каждый из этих ингредиентов и добавить их в массив «ингредиенты» (потому что я не думаю, что Я могу отправить массив ингредиентов из формы HTML). Я явно не хочу жестко кодировать ingredients.push(req.body.ingredient_1)
, ingredients.push(req.body.ingredient_2)
et c ... потому что количество ингредиентов для каждого рецепта будет различным. Есть ли способ увеличить имена переменных? Это может проиллюстрировать то, что я пытаюсь сделать, хотя я знаю, что это явно не работает:
ingredientsList=[];
var counter=1;
while(req.body.**"ingredient_"+counter**){
ingredientsList.push(req.body.**'ingredient_'+counter**);
counter++
}
Альтернативные идеи для передачи динамически созданных пар имя: значение из формы HTML в JS бэкэнд было бы желательно, но я также хотел бы знать, возможно ли динамическое увеличение параметров, как я пытался выше - req.body.parameter[i]
Спасибо!