Как скопировать элемент формы, содержащий массив в Javascript? - PullRequest
0 голосов
/ 14 октября 2019

Я хочу скопировать элемент массива <input name="name[]" > из одной формы в другую. Проблема, которую я не могу решить, состоит в том, чтобы присвоить значение массива новому элементу.

в javascript, это прекрасно работает:

document.getElementById("newName").value = document.getElementById("name").value;

, но это не так:

document.getElementsByName("newName[]").value = document.getElementsByName("name[]").value;

Самое близкое, что я мог бы получить, это:

 var names = document.getElementsByName('name[]');  // names is a Nodelist
 var array_name = [];
  var i;
  for (i = 0; i < names.length; i++) {
       array_name.push(names[i].value);
                        }
 document.getElementById("newName").value = array_name;

Но когда я вызываю document.getElementById("newName").value, он возвращает строку (или список длиной 1) ["name1, name2"]. То, что я хочу, это массив ["name1", "name2"]

Я ищу что-то вроде:

Ввод:

<form id="source">
<input type="text" placeholder="Enter your name" id="name" name="name[]">
</form>

Вывод:

<form id="destination">
<input type="hidden" id="newName" name="newName[]" value="">
</form>

ОБНОВЛЕНИЕ: я нашел обходной путь: в то время как $(form) дает вам доступ только к текущей форме, $('form') даст доступ ко всем формам. Нет необходимости копировать данные из одной формы в другую.

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Вы всегда можете конвертировать результат в то, что вы хотите - похоже, что это массив с 1 большой строкой, так:

var result = document.getElementById("newName").value;
result = result[0].split(",");
console.log(result);

Если вы думаете, что в результате будет запятая, вы можете использовать другой разделитель:

var names = document.getElementsByName('name[]');  // names is a Nodelist
  var array_name = [];
  var i;
  for (i = 0; i < names.length; i++) {
       array_name.push(names[i].value);
       ...
  }
 array_name.join("__");
 document.getElementById("newName").value = array_name; 


var result = document.getElementById("newName").value;
result = result[0].split("__");
console.log(result)
    ...
0 голосов
/ 14 октября 2019

Используйте это следующим образом:

let names = document.getElementsById('name').value;
document.getElementById("newName").value = names.split(', ');

Это присвоит массив имен полю значений.

Хотя я не уверен, возможно ли это вообще. Я бы предположил, что массивы форм сохраняются в виде списков CSV в фоновом режиме, поэтому этот код будет правильным:

document.getElementById("newName").value = document.getElementsById('name').value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...