jquery добавить в массив по клику? - PullRequest
1 голос
/ 30 марта 2010

Я в замешательстве относительно каждого () и .each () ... Я думаю, что мне нужно использовать оба, но я не уверен, как ...

По сути, у меня есть ряд флажков, и когда они отмечены, я хочу получить идентификатор ближайшей строки таблицы и добавить его в массив, который затем можно сериализовать и передать функции.

Итак, HTML выглядит так:

<tr id="t1"><td><input type="checkbox" name="did[]" value="232" class="bd" /></td></tr>
<tr id="t2"><td><input type="checkbox" name="did[]" value="234" class="bd" /></td></tr>
<tr id="t3"><td><input type="checkbox" name="did[]" value="676" class="bd" /></td></tr>
<tr><td><button id="tsid" name="tsid" type="button">Send</button></td></tr>

И когда (и если) флажок установлен, я хочу получить ближайший идентификатор tr и сохранить его в массиве:

var trids = []

А затем сериализовать входные данные и массив trids ...

Пока у меня есть только это:

$('#tsid').click(function() {

  //meant to get the values of the selected checkboxes
  var myData = $('input[name=did[]]').serialize();

  //meant to find and store the closest tr ids in an array... 
  $('.bd').each(function() {
    var trids = $(this).closest("tr").get(0);  //and now I'm lost... 
  });

}

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Это должно быть просто:

$('.bd:checked').each(function() {
   trids.push($(this).closest("tr").attr('id')); // instead of var trids = ....
});

$('.bd:checked') устанавливает только отмеченные флажки. closest('tr') получает родителя tr, как вы уже сделали это правильно. attr('id') получает id этого tr. В get(0) нет необходимости, поскольку closest() уже выбирает только один элемент.
Затем это значение добавляется в массив trids с помощью метода push() в массиве.

Обновление:
Функция jQuery .searialize() генерирует строку из значений элементов формы, например ::

field1=value1&field2=value2&...

Я не думаю, что это работает на массивах, хотя. Единственное решение, которое я знаю, это сгенерировать строку для массива самостоятельно:

var myData = $('input[name=did[]]').serialize();

for(var i = 0; i < trids.length; i++) {
    myData += '&trid[]=' + trids[i]; or // '&trid%5B%5D=' have it encoded.
}

Это добавит значения массива к сериализованной строке.
Но я думаю, что есть лучшее решение для этого.

0 голосов
/ 30 марта 2010

Просто получите элементы, затем используйте функцию map, чтобы получить идентификатор из каждого элемента tr. Используйте метод get, чтобы получить результат в виде массива вместо объекта jQuery.

var trids = $('.bd').map(function(i,e){ return $(e).closest('tr').attr('id'); }).get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...