Как получить массив с jQuery, несколько <input> с тем же именем

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

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

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

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

Спасибо заранее.

Ответ 1

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

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

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

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

Ответ 2

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

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

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

$('.task').each(function(){
   alert($(this).val());
});

Ответ 3

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

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

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

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

var taskArray = new Array();
$("input[name=task]").each(function() {
   taskArray.push($(this).val());
});

Ответ 4

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

$("input[name*='task']")

Ответ 5

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

<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));
});

Ответ 6

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());
});

Ответ 7

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

$("[id=task]:eq(0)").val();
$("[id=task]:eq(1)").val();
etc...

Ответ 8

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