Добавление поля, без перезагрузки страницы

Author Роман Чернышов    Category HTML, JavaScript / jQuery     Tags , , Комментариев 0 Дата 10 Фев

addform Добавление поля, без перезагрузки страницыСуществует множество способов и технологий позволяющих реализовать динамическое добавление полей на странице (без перезагрузки). Т.е. пользователь просто жмет кнопку «добавить поле» и новое поле для ввода каких либо данных добавляется к форме. В интернете описано много способов, но практически все их них основаны на 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).

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

Консультации

Консультант Чернышов Р.В. Зайдайте вопрос на любую из тем:
Бесплатно и без регистрации!

Задать вопрос
Все вопросы
Последние вопросы
Поиск по блогу
Категории
Архив
Новое на сайте
Портфолио Все работы

www.detskiy-mir.net
www.detskydoctor.ru
www.betelit.ru
www.all-alliance.ru
www.videogonok.ru
www.carpfishing.by
www.property-greek.com
www.domcons.ru

с 2009 года по сегодняшний день, создано более 300 сайтов...