Bezdepbonusu7Программирование: статьи и ответы

Вопрос

JQuery получает значения из входных данных и создает массив

Автор вопроса: Don PОтветов: 6

У меня много входов на странице. Я хочу создать ассоциативный массив с именем и значением каждого входа, используя jQuery. Я пытался:

<input class="activeInput" type="text" name="key1" value="red">
<input class="activeInput" type="text" name="key3" value="France">

inputValues = $('.activeInput').val();

РЕДАКТИРОВАТЬ. Благодаря проницательным комментариям кажется, что создание объекта - лучший способ. Любые предложения о том, как создать объект вместо этого?

  • .val() получает только значение первого ввода. Вы пробовали что-нибудь еще? Kevin B 23.10.2012
  • в заголовке первого просмотра (чтения) я думал, что вы хотите получить значение клавиши клавиатуры NullPoiиteя 23.10.2012
  • @DonnyP половина ответов ниже создает объект. Kevin B 24.10.2012
  • Возможно, вы хотите, как здесь stackoverflow. ком/вопросы/5550220/ nagiyevel 08.10.2015

javascriptinputjquerykey-value

Ответы

Ответ 1 · рейтинг 55 · Jon

Вы можете использовать .each() для перебора элементов и добавления имен и значений на карту (обычный объект ) как это:

var map = {};
$(".activeInput").each(function() {
    map[$(this).attr("name")] = $(this).val();
});

alert(map.key1); // "red"

Посмотрите, как это работает.

Ответ 2 · рейтинг 19 · Samuel Willems

Чтобы создать массив значений, вы можете сделать это:

var $inputValues = $('.activeInput')
  .map((i, el) => el.val())
  .toArray();

Чтобы создать объект с ключами и значениями, вы можете сделать это:

var data = $('.activeInput')
  .toArray()
  .reduce((accumulator, element) => {
    accumulator[element.name] = element.value;
    return accumulator;
  }, {});

Ответ 3 · рейтинг 5 · earl3s

Запуская их через цикл, вы можете создать объект со строковыми доступными значениями. В Javascript нет понятия ассоциативного массива, но с помощью синтаксиса квадратных скобок вы можете получить доступ к свойствам объекта почти так же, как ассоциативный массив работает в PHP.

var values = {};
$('.activeInput').each(function() {
    values[this.name] = this.value;
});

console.log(values['key1'], values['key3']);
// Note, this is the same as above.
console.log(values.key1, values.key3);

В вашей консоли вы должны увидеть: красная Франция

Вот http://jsfiddle.net/rEtVt/ для этого.

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

Ответ 4 · рейтинг 2 · circusdei

var inputValues = new Array();
$('input').each(function(){
    inputValues[$(this).attr('name')] = $(this).val();
});

Это предполагает, конечно, что вы хотите получить значение всех входных данных.


При этом до моего сведения было доведено много причин не использовать и Array.

Ответ 5 · рейтинг 1 · Andrey Kuzmin

Если вам нужно сериализовать форму для отправки ajax, вам следует взглянуть на serialize и serializeArray методы jQuery. Особые случаи могут возникнуть, когда у вас есть много входных данных с одним и тем же атрибутом name, которые должны создавать массив на сервере.

В противном случае я бы вызвал jquery serializeArray для элемента формы и перебрал его результаты, чтобы преобразовать его в объект.

UPD: добавлен пример http://jsfiddle.net/zQNUW/

Ответ 6 · рейтинг -1 · Community

Попробуй это:

var values = new Object() // creates a new instance of an object
$('.activeInput').each(function() {
    values[$(this).attr('name')] = $(this).val()
})

Чтобы проверить свойства объекта:

output = ""
for (property in values) {
  output += property + ': ' + values[property]+'; ';
}
alert(output)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы