Когда я отправляю форму в 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.
Отчасти. Входные данные устанавливаются в HTML на основе значений из предыдущей отправки, но затем мне нужно изменить их при следующей отправке, получив значения из объекта javascript. Параметров может быть больше или меньше по сравнению с предыдущей отправкой.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Один из подходов - дать каждому входу уникальный идентификатор: -
<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];
Привет, Энтони, спасибо за идею. Этот подход будет работать, но проблема в том, что мне придется генерировать элементы динамически, поскольку я не знаю, сколько их будет до отправки формы. Это сработает, но я предпочитаю более чистое решение, если оно есть.
Похоже, мне все-таки пришлось создавать элементы динамически. Спасибо за ваше предложение.
В этом случае добавьте эту деталь в текст вашего вопроса, чтобы принятый ответ лучше соответствовал вопросу.
Это то, что вы ищете? Он генерирует скрытое поле формы для каждого элемента массива 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);
}
Спасибо, это то, что мне нужно. Мне просто нужно было добавить часть для удаления старых элементов из предыдущего представления перед созданием новых.
Не уверен в том, что вы пытаетесь сделать, но вот шаг:
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
Спасибо, это довольно близко к тому, что мне нужно. Однако мне пришлось применить немного более сложный подход, сначала удалив старые элементы, а затем сгенерировав новые, поскольку я не мог гарантировать, что длины будут одинаковыми.
прерывается, если на странице есть элементы с таким же именем в других формах (или где-либо еще); лучше использовать form.elements для доступа к конкретной форме ...
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>
Значит, вы динамически генерируете эти входные данные с помощью javascript?