Добавить динамическое имя для последовательного ввода - PullRequest
2 голосов
/ 12 июня 2009
<tr>
<td><input name="of[1][dsn]" type="text" size="6" /></td>
<td><input name="of[1][gc]" type="text" size="6" /></td>
<td><input name="of[1][ys]" type="text" size="3" /></td>
<td><input name="of[1][ym]" type="text" size="3" /></td>
<td><input name="of[1][yl]" type="text" size="3" /></td>
<td><input name="of[1][s]" type="text" size="3" /></td>
<td><input name="of[1][m]" type="text" size="3" /></td>
<td><input name="of[1][l]" type="text" size="3" /></td>
<td><input name="of[1][xl]" type="text" size="3" /></td>
<td><input name="of[1][xxl]" type="text" size="3" /></td>
<td><input name="of[1][xxxl]" type="text" size="3" /></td>
<td><input name="of[1][xxxxl]" type="text" size="3" /></td>
<td><input name="of[1][xxxxxl]" type="text" size="3" /></td>
<td><input name="of[1][total]" type="text" size="4" /></td>
</tr>

В настоящее время у меня это клонируется с использованием jQuery, и я хотел бы иметь его там, где число в атрибуте "name" увеличивается на +1 каждый раз, когда оно дублируется. "из [1] [dsn]" в "из [2] [dsn]" и т. д. Как я могу это сделать? Ниже приведено то, что я пытался использовать, но это было просто заменой того, что уже было.

 ("input").each(function(index, element){$(element).attr("name", index);});

Это то, что я использую для клонирования строки таблицы:

var clonedRow = $("table tr:last").clone();     
$("table tr:last").clone(true).insertAfter("table tr:last").append(clonedrow);

Ответы [ 2 ]

1 голос
/ 12 июня 2009

Хорошо, тебе нужно что-то подобное. Сначала мы клонируем, затем увеличиваем число в имени на единицу, а затем применяем это к каждому входу и затем вставляем их в DOM.

var $cloned = $('#selector').clone();
var oldIndex = $cloned.find('input').attr('name').match(/\d+/);
var newIndex = parseInt(oldIndex,10)+1;
$cloned.find('input').each(function(){
   var newName = $(this).attr('name').replace(oldIndex, newIndex);
   $(this).attr('name', newName);
});
$cloned.appendTo('#something');

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

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

function clone(){
  var $cloned = $('table tr:last').clone();
  var oldIndex = $cloned.find('input').attr('name').match(/\d+/);
  var newIndex = parseInt(oldIndex,10)+1;
  $cloned.find('input').each(function(){
     var newName = $(this).attr('name').replace(oldIndex, newIndex);
     $(this).attr('name', newName);
  });
  $cloned.insertAfter('table tr:last');
}
$('p.add-btn').click(clone);
0 голосов
/ 12 июня 2009

Проверьте функцию jQuery clone и посмотрите, поможет ли это. Я думаю, вам все равно придется провести некоторый анализ, чтобы обновить имена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...