Установка многозначного параметра в javascript

Когда я отправляю форму в HTML, я могу передавать параметр несколько раз, например

<input type = "hidden" name = "id" value = "2">
<input type = "hidden" name = "id" value = "4">

Затем в struts у меня может быть bean-компонент со свойством String [] id, и он правильно заполнит массив.

У меня вопрос, как я могу это сделать в Javascript? Когда у меня есть массив, и я устанавливаю form.id.value = myArray, он просто устанавливает значение в список, разделенный запятыми. Итак, в конце Struts я просто получаю одноэлементный массив, то есть String «2,4».

Я должен добавить, мне нужно отправить это в форме, поэтому я не могу просто сгенерировать запрос GET, например id = 2 и id = 4.

Значит, вы динамически генерируете эти входные данные с помощью javascript?

enobrev 10.01.2009 03:05

Отчасти. Входные данные устанавливаются в HTML на основе значений из предыдущей отправки, но затем мне нужно изменить их при следующей отправке, получив значения из объекта javascript. Параметров может быть больше или меньше по сравнению с предыдущей отправкой.

Markus 10.01.2009 03:07
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
1 517
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Один из подходов - дать каждому входу уникальный идентификатор: -

<input id = "id1" type = "hidden" name = "id" value = "2">
<input id = "id2" type = "hidden" name = "id" value = "4">

Затем в javascript: -

document.getElementById("id1").value = myArray[0];
document.getElementById("id2").value = myArray[1];

Привет, Энтони, спасибо за идею. Этот подход будет работать, но проблема в том, что мне придется генерировать элементы динамически, поскольку я не знаю, сколько их будет до отправки формы. Это сработает, но я предпочитаю более чистое решение, если оно есть.

Markus 10.01.2009 03:00

Похоже, мне все-таки пришлось создавать элементы динамически. Спасибо за ваше предложение.

Markus 10.01.2009 03:26

В этом случае добавьте эту деталь в текст вашего вопроса, чтобы принятый ответ лучше соответствовал вопросу.

AnthonyWJones 10.01.2009 17:55
Ответ принят как подходящий

Это то, что вы ищете? Он генерирует скрытое поле формы для каждого элемента массива JavaScript:

var el;
for (var i = 0; i < myArray.length) {
    el = document.createElement("input");
    el.type = "hidden";
    el.name = "id";
    el.value = myArray[i];

    // Optional: give each input an id so they can easily be accessed individually:
    el.id = "hidden-myArray-" + i;

    // Optional: give all inputs a class so they can easily be accessed as a group:
    el.className = "hidden-myArray";

    form.appendChild(el);
}

Спасибо, это то, что мне нужно. Мне просто нужно было добавить часть для удаления старых элементов из предыдущего представления перед созданием новых.

Markus 10.01.2009 03:24

Не уверен в том, что вы пытаетесь сделать, но вот шаг:

var inputs = document.getElementsByName('id');
for(var i=0; i<inputs.length; i++) {
    var input = inputs[i];
    input.value = myArray[i];
}

Это перебирает все входы с именем «id» и присваивает соответствующее значение из myArray.

Тебе лучше быть уверенным, myArray.length == document.getElementsByName('id').length

Спасибо, это довольно близко к тому, что мне нужно. Однако мне пришлось применить немного более сложный подход, сначала удалив старые элементы, а затем сгенерировав новые, поскольку я не мог гарантировать, что длины будут одинаковыми.

Markus 10.01.2009 03:24

прерывается, если на странице есть элементы с таким же именем в других формах (или где-либо еще); лучше использовать form.elements для доступа к конкретной форме ...

Christoph 10.01.2009 03:27

forms[0].elements.theName содержит коллекции всех элементов с именем-атрибутом theName. Пример:

<form>
<input type = "text" name = "test"><br>
<input type = "text" name = "test">
</form>
<script>
var values = ['foo', 'bar'];
var testElements = document.forms[0].elements.test;
for(var i = 0; i < testElements.length; ++i)
    testElements[i].value = values[i];
</script>

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