Форма внутри формы 
		
		
		
		Доброго времени суток, господа. Помогите реализовать задуманное. 
	Есть Код JS 
$(function() {
		$("#form_status_added").click(function () {
		var elemCount = document.getElementsByClassName('param').length + 1;
			$("<div class='param mt-3'><div class='row'><div class='col-12'><div class='alert alert-primary text-center' id='totals'><strong>"+elemCount+"</strong></div></div><div class='col-12'><textarea rows='5' class='form-control mb-3' type='text' name='rabota"+elemCount+"[]' placeholder='Наименование видов работ'></textarea></div></div></div><div class='row'><div class='col-12 mb-2 text-center'><strong>Материал</strong></div></div><div class='row' id='mater"+elemCount+"'><div class='col-8'><input class='form-control mb-3' type='text' name='mater_name"+elemCount+"[]' placeholder='Название'></div><div class='col-2'><input class='form-control mb-3' type='text' name='mater_units"+elemCount+"[]' placeholder='Количество'></div><div class='col-2'><input class='form-control mb-3' type='text' name='mater_price"+elemCount+"[]' placeholder='Цена за ед.'></div></div><div class='row' id='nextmater"+elemCount+"'><div class='col-12'><input class='btn btn-primary btn-lg btn-block' type='button' value='Добавить Материал' id='form_"+elemCount+"'></div></div><div class='row'><div class='col-12'><hr></div></div>" ).insertBefore("#next");
			document.getElementById('total').value = elemCount;
		});
	 });
	$(function() {
		$("form_1").click(function () {
			$("<div class='row' id='mater1'><div class='col-8'><input class='form-control mb-3' type='text' name='mater_name1[]' placeholder='Название'></div><div class='col-2'><input class='form-control mb-3' type='text' name='mater_units1[]' placeholder='Количество'></div><div class='col-2'><input class='form-control mb-3' type='text' name='mater_price1[]' placeholder='Цена за ед.'></div></div>" ).insertBefore("#nextmater1");
		});
	 });
$(document).ready(function () {
	var elemtotal = document.getElementsByClassName('param').length;
	document.getElementById('total').value = elemtotal;
});
Код HTML <div class="param mt-3"> <div class="row"> <div class="col-12"><div class="alert alert-primary text-center" id="totals"><strong>1</strong></div></div> <div class="col-12"><textarea rows="5" class="form-control mb-3" type="text" name="rabota1[]" placeholder="Наименование видов работ"></textarea></div> </div> <div class="row"> <div class="col-12 mb-2 text-center"><strong>Материал</strong></div> </div> <div class="row" id="smeta_mater1"> <div class="col-8"><input class="form-control mb-3" type="text" name="smeta_mater_name1[]" placeholder="Название"></div> <div class="col-2"><input class="form-control mb-3" type="text" name="smeta_mater_units1[]" placeholder="Количество"></div> <div class="col-2"><input class="form-control mb-3" type="text" name="smeta_mater_price1[]" placeholder="Цена за ед."></div> </div> <div class="row" id="nextmater1"> <div class="col-12"> <input id="form_1" class="btn btn-primary btn-lg btn-block" type="button" value="Добавить Материал"> </div> </div> <div class="row"><div class="col-12"><hr></div></div> </div> <div class="row" id="next"> <div class="col-6"> <input class="btn btn-primary btn-lg btn-block" type="button" value="Добавить поле" id="form_status_added"> </div> <div class="col-6"> <input type="hidden" name="total" id="total" value=""> <button name="updates" class="btn btn-primary btn-lg btn-block">Обновить</button> </div> </div> Так вот. Это добавление внутри добавления. Примерно визуализированное https://jsfiddle.net/069fojyx/ Не работает #form_1 И как написать скрипт для всего добавленного по полю #form_status_added  | 
	
		
 Цитата: 
	
  | 
	
		
 "#form_1" заработало 
	Я новичок в этой теме и неспеша разбираюсь при добавлении основного дополнительного поля все добавляется с уникальным индификатором, но дальше добавления не работает, даже с этим 
$(function() {
		$("#form_1").click(function () {
			$("<div class='row' id='smeta_mater1'><div class='col-8'><input class='form-control mb-3' type='text' name='smeta_mater_name1[]' placeholder='Название'></div><div class='col-2'><input class='form-control mb-3' type='text' name='smeta_mater_units1[]' placeholder='Количество'></div><div class='col-2'><input class='form-control mb-3' type='text' name='smeta_mater_price1[]' placeholder='Цена за ед.'></div></div>" ).insertBefore("#nextmater1");
		});
	});
	$(function() {
		$("#form_2").click(function () {
			$("<div class='row' id='smeta_mater2'><div class='col-8'><input class='form-control mb-3' type='text' name='smeta_mater_name2[]' placeholder='Название'></div><div class='col-2'><input class='form-control mb-3' type='text' name='smeta_mater_units2[]' placeholder='Количество'></div><div class='col-2'><input class='form-control mb-3' type='text' name='smeta_mater_price2[]' placeholder='Цена за ед.'></div></div>" ).insertBefore("#nextmater2");
		});
	});
И чем отличается ID и CLASS у JS ?  | 
	
		
 Цитата: 
	
 Использовать разные ID можно, но только не для такого: $("#form_1").click(function () ... $("#form_2").click(function () ... ... ибо это расточительство. Используя имя класса можно получить коллекцию элементов, то есть установить единый обработчик для всех элементов. А в случае их динамического добавления на страницу, делегировать обработчик ближайшему их общему родителю, который гарантированно присутствует на странице. В jQuery это так: 
$("селектор родителя").on("событие", "селектор элементов делегирующих обработку, имя их класса и т.п.", function() {
   //здесь this, это источник события, то есть элемент по которому щелкнули и т.п.
   //если им оперировать далее как jq-объектом, то это будет $(this) 
}}
 | 
	
		
 Так? (пока не работает) 
	<div class="row"> <div class="col-12 smeta_mater"> <div class="row smeta_list"> <div class="col-8"><input class="form-control mb-3" type="text" name="smeta_mater_name1[]" placeholder="Название"></div> <div class="col-2"><input class="form-control mb-3" type="text" name="smeta_mater_units1[]" placeholder="Количество"></div> <div class="col-2"><input class="form-control mb-3" type="text" name="smeta_mater_price1[]" placeholder="Цена за ед."></div> </div> </div> </div> </div> <div class="row"> <div class="col-12"> <input id="addmater" class="btn btn-primary btn-lg btn-block" type="button" value="Добавить Материал"> </div> </div> 
$(".param").on('click', '#addmater', function() {
	var list = ('.smeta_mater');
	item = list.find('.smeta_list').last().clone();
	
	item.find('input').val('');
	
	list.append( item );
});
 | 
	
		
 Если кнопка id="addmater" всегда на странице и ею производится добавление, то зачем делегировать ее события родителю? Вы ведь до этого совсем иное показывали, добавляя блоки, по которым нужно было щелкать, вот тогда и нужно было делегировать обработку. 
	А в данном примере, это просто обработчик щелчков по кнопке, копировать всегда первый дочерний блок DIV (тут даже и класса не нужно) родителя div.smeta_mater, который удалить нельзя, в отличие от добавляемых, возможность удаления которых в общем-то нужна. 
$("#addmater").click(function() {
    var list = ('div.smeta_mater');
    list.children().first().clone().appendTo(list).find('input').val('');
     
    //item.find('input').val(''); - а так будут возвращены поля, и только они будут вставлены
    //если так поступать, тогда item.find('input').val('').end(); и затем вставлять
});
 | 
	
		
 Все равно не могу понять 
	Есть div c class='param' ( первый блок с индификатором 1 ) В нем есть еще одна группа в обертке div с class='mater1' в котором есть div с class='list1' который нужно дублировать по кнопке с id='addmater1' Нажимая по кнопке с id='form_status_added' добавляется новый div c class='param' ( уже с индификатором 2 ) и у всех остальных тоже он 2 ( mater2 list2 addmater2 https://jsfiddle.net/2v4gnbL5/ Я никак не пойму как мне дописать код чтоб все работало Пробую разобраться но не понимаю  | 
	
		
 Во-первых - texarea, это и есть текстовое поле и в отличие от input оно по определению своему не нуждается в указании type="text", и что это ненужный для него атрибут укажет даже редактор подсветкой. 
	Во-вторых - пора бы понять, что действиями типа name='rabota"+elemCount+"[]' и т.п., результатом которых сервер получит ключ плюс их нумерацию, вы заставляете сервер заниматься пустой и бесполезной работой. Эти действия кроме вредительства ничего не дают ни клиенту, ни серверу. Именовать поля нужно как fieldname[], без всяких номеров, и сервер получит массив с ключом fieldname с индексами от 0 до ... Тоже самое касается и class='mater1', и id='addmater1' и прочей пустой и никчемной нумерации. В третьих - в обработчике $("#form_status_added").click(function ... достаточно клонировать первый дочерний элемент формы, вставляя его перед $(this).closest('.row'). В четвертых - не знаю куда вставлять добавления по кнопке addmater, но как было сказано выше, выбросить и нумерацию и вообще ID у этой кнопки, вместо него добавьте этой кнопке какой либо класс, пусть к примеру это будет added. По имени этого класса делегировать обработку этих кнопок форме, как это делается было показано ранее.  | 
	
		
 А зачем вам дублировать содержимое? Вы можете использовать уже прописанный в HTML код как шаблон для создания последующих частей! 
	Вот код, который добавляет материалы и поля! https://jsfiddle.net/ga5sw7fu/ Почистите код от лишних классов и <div>-ов!  | 
	
		
 Malleys, только именовать поля нужно так: 
	rabota[0] mater_name[0][] mater_units[0][] mater_price[0][] и в обработчике form_status_added увеличивать индекс. Я так понимаю он хочет сгруппировать наборы. Вот только, по идее, должна быть возможность и удаления добавленного, а значит надо следить за всеми наборами, чтобы не получить дубликата ключа.  | 
| Часовой пояс GMT +3, время: 04:47. |