ОБНОВЛЕНИЕ
ОК, поэтому я сделал jsfiddle и получил это решение.
добавил атрибут данных к элементу TR (data-cloned="false"
), чтобы отслеживать, какие строки уже были клонированы (таким образом, только щелчок по самой новой строке создаст другой клон)
поместил событие click в документ и использовал делегирование событий. Это позволяет нам запускать событие click для динамически добавляемых строк.
добавил индекс [0] к этому назначению, чтобы сохранить разметку в нашей переменной. var thisRow = $(this).closest('.tr_clone')[0];
Итак, в основном мы создаем переменную thisRow и присваиваем ей разметку для нашей строки, по которой "щелкнули".
Затем мы используем .data()
, чтобы проверить, строка уже была клонирована.
Если это так, мы ничего не делаем.
Если это не так, мы .clone()
thisRow и цепочка .insertAfter(thisRow)
, а затем цепочка поиска / удаления для входных значений (.find('input:text').val('');
)
Наконец, мы используем .data ( ), чтобы указать, что эта строка уже была клонирована ... $(thisRow).data("cloned", "true");
Ответ
Сначала .live () is удалено с jQuery 1.9, поэтому, если вы не работаете с древней кодовой базой, вы захотите проверить .on () .
Во-вторых, вы присоединяете keydown событие, поэтому при каждом нажатии клавиши будет запускаться соответствующий обработчик. Вам нужно будет создать logi c в обработчике событий для отслеживания. Лично я бы использовал click
событие вместо нажатия клавиши, но это, вероятно, не имеет большого значения.
(function($) {
$(function() { //document.ready
$(document).on('click', '.tr_clone_add', function() {
var thisRow = $(this).closest('.tr_clone')[0];
if (!$(thisRow).data("cloned")) {
$(thisRow).clone()
.insertAfter(thisRow)
.find('input:text').val('');
$(thisRow).data("cloned", "true");
}
});
});
})(jQuery);