Иногда необходимо при заполнении формы данных добавить дополнительные поля, после нажатии соответствующей кнопки.
Есть такая группа полей объединенные в блок param , и кнопка для добавления

<div class="param">
	<input type="text" name="status_vendor[]" placeholder="Вендор" >
	<input type="text" name="status_name[]" placeholder="Название статуса">
	<input type="text" name="status_specialization[]" placeholder="Специализация" >
	<input type="text" name="status_year[]" placeholder="Год" >
</div>
<input type="button" value="Добавить статус" id="form_status_added">

В имени поля используются квадратные скобки ([]), это обозначает что будут данные переданы в массив.
Для добавления был написан следующий код, где добавление осуществляется перед кнопкой «Добавить статус»:

$("#form_status_added").click(function () {
	$("<div class='param'><input type='text' name='status_vendor[]' placeholder='Вендор'> <input type='text' name='status_name[]' placeholder='Название статуса'> <input type='text' name='status_specialization[]' placeholder='Специализация'> <input type='text' name='status_year[]' placeholder='Год'></div>" ).insertBefore("#form_status_added");
})

P.S. Для работы скрипта должен быть подключен jquery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

В случае когда есть числовое значение, которое меняется в зависимости от добавления новых полей. Например

<div class="list_year">
	<div class="param">
		<label for="year_2013">2013 год</label>
		<input type="text" id="year_2013" name="year[]"><br>
	</div>
	<div class="param">
		<label for="year_2012">2012 год</label>
		<input type="text" id="year_2012" name="year[]"><br>
	</div>
</div>
<input type="button" value="Добавить год" id="form_year_added">

Нужно добавить еще и элемент для хранения данной переменной. Допустим:

<span id="form_year_number">2013</span>
<style>
#form_year_number {display:none;}
</style>

Т.к. здесь поля расположены в блоке «list_year», то и добавление новых полей можем прописать в конце этого блока.

$("#form_year_added").on("click",function () {
	var number_year = $("#form_year_number").text() -1;
	$("#form_year_number").html(number_year);
	$("<div class='param'><label for='year_" + number_year + "'>" + number_year + " год</label> <input type='text'  id='year_" + number_year + "' name='year[]'></div>" ).appendTo( ".list_year" );
})

Здесь при нажатии на кнопку «Добавить год», берется значение тега #form_year_number, введенного специально для определения последнего добавленного года, уменьшается год на единицу, и прописывается значение это в label и сам input.
Демонстрация рабочего примера:

Прикрепленный файл: form.zip (1.29 Kb)

Оценить:|
  
Комментировать
Раздел: JavaScript    
Просмотров: 10096
Комментариев (8)
  1. moroz69off
    Юрий Морозов [moroz69off]
    28.08.2013 в 21:03

    Хорошая штука, наверное, правда пока еще не пригодится. Вот если б вы показали пример попроще, а именно — пример поля в форме с выпадающим списком для выбора… Если можно. Хотя бы вот такой пример, с вашими комментариями кода.
    С уважением, Морозов Юрий.

    967_kkkkkkPNG

  2. Ольга [Olga]
    28.08.2013 в 23:48

    Вас интересует автозаполнение ?

  3. moroz69off
    Юрий Морозов [moroz69off]
    29.08.2013 в 12:37

    Прошу прощения, ухожу от общения. Меня прогнал злой админ с ведром на голове.

  4. moroz69off
    Юрий Морозов [moroz69off]
    07.11.2013 в 09:55

    Здравствуйте Olga! Пожалейте старого дурака, покажите(если можно, с комментариями) как добавить ряд из двух полей определённое число раз(по количеству option в select). Всю ночь промучился, сейчас крыть начнёт, а успокоиться без результата не могу.
    Вот эту часть формы хочу добавлять столько раз — сколько option в select:

    <div class="control-group">
    	    <label class="control-label" for="inputMessenger">
             Дополнительно:
            </label>
    		<div class="controls">
    			   <select class="span2" name="sel_mess">
    			    <option>skype</option>
    				<option>icq</option>
    				<option>fax</option>
    			   </select>
    			<input type="text" class="span2" name="messenger" placeholder="Мессенджер">
                <input type="button" value="+" name="add_mess">
    		</div>
           </div>

    1136_SnimokPNG

  5. moroz69off
    Юрий Морозов [moroz69off]
    07.11.2013 в 22:35

    Спасибо Olga! Cпасибо, что помогаете разобраться в трудную минуту. Конечно, вы немного неправильно поняли задачу, но ваш вариант где то уже поблизости. Я хотел «поставить на счетчик», то есть добавление возможно лишь ТРИ раза по одной паре: select - input . Вы предлагаете добавить сразу три, но задача не решена, нужно дотянуть скрипт — ничего не добавлять после определённого порога, сколько не жми. Еще раз спасибо, за ваше потраченное время.
    С уважением, Морозов Юрий.
    Если осталась еще минутка в запасе, просто короткий совет попрошу: справа мне нужны ещё много полей для заполнения, проще простого — вторая колонка. Вопрос такой, две формы из разных колонок в принципе можно отправлять одной большой кнопкой внизу? Y — N?

    1138_Snimok343PNG

Оставить комментарий