Как получить массив с jQuery, кратным <input>с тем же именем - PullRequest
60 голосов
/ 13 апреля 2010

У меня есть форма, где пользователи могут добавлять поля ввода с помощью jQuery.

<input type="text" id="task" name="task[]" />

После отправки формы я получаю массив на PHP.

Я хочу справиться с этим с $.ajax(), но я не знаю, как превратить мои <input> в массив в jQuery.

Заранее спасибо.

Ответы [ 8 ]

115 голосов
/ 13 апреля 2010

Использование map :

var values = $("input[id='task']")
              .map(function(){return $(this).val();}).get();

Если вы измените или удалите идентификатор (который должен быть уникальным), вы также можете использовать селектор $("input[name='task\\[\\]']")

Рабочий пример: http://jsbin.com/ixeze3

32 голосов
/ 13 апреля 2010

Для нескольких элементов вы должны дать ему класс, а не идентификатор, например:

<input type="text" class="task" name="task[]" />

Теперь вы можете получить те, которые используют jquery примерно так:

$('.task').each(function(){
   alert($(this).val());
});
15 голосов
/ 13 апреля 2010

Во-первых, у вас не должно быть нескольких элементов с одинаковым идентификатором на странице - идентификатор должен быть уникальным.

Вы можете просто удалить атрибут id и заменить его на:

<input type='text' name='task'>

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

var taskArray = new Array();
$("input[name=task]").each(function() {
   taskArray.push($(this).val());
});
9 голосов
/ 10 апреля 2013

Чтобы поймать массив имен, я использую это:

$("input[name*='task']")
6 голосов
/ 13 апреля 2010

Нельзя использовать один и тот же идентификатор для нескольких элементов в документе. Сохраняйте идентификаторы и называйте их одинаковыми.

<input type="text" id="task1" name="task" />
<input type="text" id="task2" name="task" />
<input type="text" id="task3" name="task" />
<input type="text" id="task4" name="task" />
<input type="text" id="task5" name="task" />

var newArray = new Array();

$("input:text[name=task]").each(function(){
    newArray.push($(this));
});
1 голос
/ 21 февраля 2017

HTML:

<input type="text" name="task[]" class="form-control" id="task">

JS:

var tasks= new Array();
$('input[name^="task"]').each(function() 
{
tasks.push($(this).val());
});
0 голосов
/ 17 октября 2016

Вы можете использовать jquery.serializeJSON , чтобы сделать это.

0 голосов
/ 03 сентября 2014

, если вы хотите, чтобы селектор получил тот же идентификатор, используйте:

$("[id=task]:eq(0)").val();
$("[id=task]:eq(1)").val();
etc...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...