Как отправить из формы HTML только часть данных
Формы - один из основных способов взаимодействия сайта и пользователя, без которых невозможно представить ни один современный сайт. Методы работы с формами стандартные, никаких сложностей в реализации вызывать не должны. В некоторых случаях требуется отправить только часть полей из большой формы. Типичный пример - настройки форума, когда можно сохранить какую-то одну из всех открытых категорий, а можно сохранить все сразу. Один из вариантов решения заключается в том, что можно каким-нибудь образом, например, уникальным индексом, пометить кнопку сабмита нужной группы.Code (HTML) : Убрать нумерацию
- <form action="process.php" method="post">
- <input type="text" name="text1" value="text1">
- <input type="checkbox" name="box1" value="box1">
- <input type="submit" name="submit1" value="Отправить 1 блок">
- <input type="text" name="text2" value="text2">
- <input type="checkbox" name="box2" value="box2">
- <input type="submit" name="submit2" value="Отправить 2 блок">
- <input type="submit" name="all" value="Отправить все">
- </form>
Второй способ, с использованием JavaScript, заключается в том, что из формы берутся нужные поля, затем динамически формируется новая форма, и на сервер отправляется уже она. Для этого придется сделать несколько вспомогательных действий. Первая - изменится разметка страницы.
Code (HTML) : Убрать нумерацию
- <div id="wrapper0">
- <div id="wrapper1">
- Текст 1: <input type="text" name="text1">
- <input type="checkbox" name="chk1" value="1">
- <input type="button" value="Сохранить" onclick="ds('wrapper1');">
- </div>
- <div id="wrapper2">
- Текст 2: <input type="text" name="text2">
- <input type="checkbox" name="chk2" value="2">
- <input type="button" value="Сохранить" onclick="ds('wrapper2');">
- </div>
- <div id="wrapper3">
- Текст 3: <input type="text" name="text3">
- <input type="checkbox" name="chk3" value="3">
- <input type="button" value="Сохранить" onclick="ds('wrapper3');">
- </div>
- <div>Глобально: <input type="text" name="global">
- <select name="sel">
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="3">3</option>
- <option value="4">4</option>
- </select>
- </div>
- <input type="button" value="Сохранить все" onclick="ds('wrapper0');">
- </div>
Вспомогательный обработчик динамически создает новую форму, заполняет ее копиями всех значений из выбранных полей и отправляет на сервер.
Code (JavaScript) : Убрать нумерацию
- //--------------------------------------------------------------------
- // Создать временную форму и перенести в нее все элементы
- //--------------------------------------------------------------------
- function ds(f) {
- var e=document.getElementById(f);
- if (!e) return false;
- // Создать временную форму
- var tmp_form = document.createElement("form");
- tmp_form.method='get';
- tmp_form.action='process.php'; // Адрес скрипта-обработчика формы
- tmp_form.style.display='none';
- document.getElementsByTagName('body')[0].appendChild(tmp_form);
- // Перенести в нее все элементы
- cf(e,tmp_form);
- // Отправить созданную форму
- tmp_form.submit();
- }
Code (JavaScript) : Убрать нумерацию
- //--------------------------------------------------------------------
- // Перенести значения полей в форму
- //--------------------------------------------------------------------
- function cf(e,f) {
- for (var i=0; i<e.childNodes.length; i++) {
- var el = e.childNodes[i];
- var elName = el.nodeName.toLowerCase();
- // Обработка input
- if (elName=='input' && el.name!='') {
- var type = el.type.toLowerCase();
- switch (type) {
- // Текстовое поле
- case 'text': {
- var tmp_el = document.createElement("input");
- tmp_el.name=el.name;
- tmp_el.type='hidden';
- tmp_el.value=el.value;
- f.appendChild(tmp_el);
- break;
- }
- // Флажок checkbox
- case 'checkbox': {
- if (el.checked) {
- var tmp_el = document.createElement("input");
- tmp_el.name=el.name;
- tmp_el.type='checkbox';
- tmp_el.value=el.value;
- f.appendChild(tmp_el);
- tmp_el.checked=true;
- }
- break;
- }
- // Флажок radio
- case 'radio': {
- if (el.checked) {
- var tmp_el = document.createElement("input");
- tmp_el.name=el.name;
- tmp_el.type='radio';
- tmp_el.value=el.value;
- f.appendChild(tmp_el);
- tmp_el.checked=true;
- }
- break;
- }
- // Текстовое поле
- case 'hidden': {
- var tmp_el = document.createElement("input");
- tmp_el.name=el.name;
- tmp_el.type='hidden';
- tmp_el.value=el.value;
- f.appendChild(tmp_el);
- break;
- }
- // Поле ввода пароля
- case 'password': {
- var tmp_el = document.createElement("input");
- tmp_el.name=el.name;
- tmp_el.type='hidden';
- tmp_el.value=el.value;
- f.appendChild(tmp_el);
- break;
- }
- // Любые другие input'ы
- default: {
- break;
- }
- }
- }
- // Обработка textarea
- else if (elName=='textarea' && el.name!='') {
- var tmp_el = document.createElement("textarea");
- tmp_el.name=el.name;
- tmp_el.value=el.value;
- f.appendChild(tmp_el);
- }
- // Обработка select
- else if (elName=='select' && el.name!='') {
- var tmp_el = document.createElement("input");
- tmp_el.name=el.name;
- tmp_el.type='hidden';
- tmp_el.value=el.value;
- f.appendChild(tmp_el);
- }
- else {
- // Обработать вложенный тег (рекурсия)
- cf(el,f);
- }
- }
- }
Просмотров: 11472 | Комментариев: 4
Метки: JavaScript, HTML
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
vic
(29.12.2011 в 15:33):
ipSlicer +5
Виктор
(16.07.2011 в 13:13):
Спасибо ! То что нужно. А то например в профиле человек поменял всего лишь одно значение, а приходится передавать все.
ManHunter
(08.11.2010 в 10:28):
ipSlicer, хороший способ, спасибо.
ipSlicer
(08.11.2010 в 02:59):
Добавлю 3-й метод, которым обычно пользуюсь я. Он так же зависит от javascript, но основан на том, что ненужным для отправки полям при обходе я просто присваиваю индекс DISABLED препятствующий отправке значения поля.
Добавить комментарий
Заполните форму для добавления комментария