Добавление поля, без перезагрузки страницы
Существует множество способов и технологий позволяющих реализовать динамическое добавление полей на странице (без перезагрузки). Т.е. пользователь просто жмет кнопку «добавить поле» и новое поле для ввода каких либо данных добавляется к форме. В интернете описано много способов, но практически все их них основаны на jQuery или Mootools. Замечу, использование таких порой грамотных стародавних библиотек просто не обосновано. Зачем подгружать 100кб лишней информации лишь только ради того, чтобы сделать форму добавления (комментариев, контактов, файлов, картинок — нужное подчеркнуть) чуть юзабельнее.
Предлагаю вариант основанный на чистом JavaScript, состоящем всего из двух функций. Имеющий малый вес и работоспособность во всех браузерах.
var countOfFields = 1; // Текущее число полей var curFieldNameId = 1; // Уникальное значение для атрибута name var maxFieldLimit = 9; // Максимальное число возможных полей function deleteField(a) { // Получаем доступ к ДИВу, содержащему поле var contDiv = a.parentNode; // Удаляем этот ДИВ из DOM-дерева contDiv.parentNode.removeChild(contDiv); // Уменьшаем значение текущего числа полей countOfFields--; // Возвращаем false, чтобы не было перехода по сслыке return false; } function addField() { // Проверяем, не достигло ли число полей максимума if (countOfFields >= maxFieldLimit) { alert("Число полей достигло своего максимума = " + maxFieldLimit); return false; } // Увеличиваем текущее значение числа полей countOfFields++; // Увеличиваем ID curFieldNameId++; // Создаем элемент ДИВ var div = document.createElement("div"); // Добавляем HTML-контент с пом. свойства innerHTML div.innerHTML = "<input name=\"vall[]\" type=\"text\" style=\"margin:3px 0 0 0;\"/> <a onclick=\"return deleteField(this)\" href=\"#\" class=\"link\">[X]</a>"; // " + curFieldNameId + " // Добавляем новый узел в конец списка полей document.getElementById("parentId").appendChild(div); // Возвращаем false, чтобы не было перехода по сслыке return false; } РЕЬД var countOfFields = 1; // Текущее число полей var curFieldNameId = 1; // Уникальное значение для атрибута name var maxFieldLimit = 9; // Максимальное число возможных полей function deleteField(a) { // Получаем доступ к ДИВу, содержащему поле var contDiv = a.parentNode; // Удаляем этот ДИВ из DOM-дерева contDiv.parentNode.removeChild(contDiv); // Уменьшаем значение текущего числа полей countOfFields--; // Возвращаем false, чтобы не было перехода по сслыке return false; } function addField() { // Проверяем, не достигло ли число полей максимума if (countOfFields >= maxFieldLimit) { alert("Число полей достигло своего максимума = " + maxFieldLimit); return false; } // Увеличиваем текущее значение числа полей countOfFields++; // Увеличиваем ID curFieldNameId++; // Создаем элемент ДИВ var div = document.createElement("div"); // Добавляем HTML-контент с пом. свойства innerHTML div.innerHTML = "<input name=\"vall[]\" type=\"text\" style=\"margin:3px 0 0 0;\"/> <a onclick=\"return deleteField(this)\" href=\"#\" class=\"link\">[X]</a>"; // " + curFieldNameId + " // Добавляем новый узел в конец списка полей document.getElementById("parentId").appendChild(div); // Возвращаем false, чтобы не было перехода по сслыке return false; } |
HTML код страницы будет выглядеть следующим образом:
<div id="parentId"> <div> <input name="vall[]" type="text"/> <a onclick="return deleteField(this)" href="#">[X]</a> </div> </div> <a onclick="return addField()" href="#">Добавить поле</a> |
В результате получаем динамически добавляемые поля. Максимальное количество полей регулируется переменной maxFieldLimit. Тип поля можно задавать произвольный (text, checkbox,f ile).

Автор:






