Модераторы: Illuminaty
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вложенные формы 
:(
    Опции темы
Itsys
Дата 9.11.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 9
Всего: 34



Добрый день,

Каким образом можно сделать одну форму вложенную в другую? По логике примено так:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Проверка форм</title>
</head>
<body>
<form method="post" action="/somefile">
    <input type="text" name="somebefore"><br>
    <form method="post" action="#" enctype="multipart/form-data" onsubmit="sendForm(this); return false;">
        <input type="file" name="filename"><input type="submit" value="Загрузить изображение"><br>
    </form>
    <input type="text" name="someafter"><br>
    <input type="submit" value="Записать изменения">
</form>
</body>
</html>


Объясню зачем все это надо, может быть есть другой способ выхода их ситуации. Есть большая форма, в которой текстовые поля чередуются с картинками, при этом картинки должны "предзагружаться" через Ajax на сервер, а затем пользователь может менять параметры картинок (качество, разрешение, размеры и т.п.), и, соответственно, в базу должна заноситься поледнее изменение картинки. Последняя версия картинки хранится на сервере и ее не надо отправлять заново вместе с формой.

ЗЫ Валидатор конечно ругается на вложенные формы, а кнопки submita действуют (проверял только в IE) наоборот - первая кнопка отправляет первую форму, а вторая вторую, т.е. не соответствую вложенности.
PM MAIL WWW Skype   Вверх
ksnk
Дата 9.11.2008, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата

при этом картинки должны "предзагружаться" через Ajax на сервер

То есть вложеная форма уже как-то работает и независима от главной? Тогда вынести ее в абсолютный слой и текстово сделать 2 разные непересекающиеся формы.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Itsys
Дата 10.11.2008, 02:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 9
Всего: 34



При вынесении в абсолюный слой, будет большая проблема с его позиционированием и здесь без JS никак не обойтись.... ну в общем не очень красибое решение...

Суть в чем, что после отправки формы в том же слое, что и форма показывается загруженная картинка и кнопки управления, которые, соответственно задействуют эту же форму для изменения параметров картинки, соответсвенно надо динамически расширять место, которое занимает форма, да и форм таких может быть несколько на одной странице, т.е.:

текст
текст
форма
текст
текст
текст
форма

и т.д. т.е. для каждой формы вначале надо будет рассчитать первоначальное положение абсолютного слоя, высоту контейнера, находящегося под слоем + надо будет постоянно пересчитывать все слои, находящиеся после текущего слоя при загрузке в него картинки.
PM MAIL WWW Skype   Вверх
ksnk
Дата 10.11.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



А зачем вообще нужна вторая форма? Сделать ee одной и невидимой...
Код

<script>
function sendfile(el){
   var placeholder=document.createElement('div'),
         form=document.getElementById('uploadform'),
         container=el.parentNode;

   placeholder = container.insertBefore(placeholder , el); // место помечаем
   
   el=form.appendChild(el);

   form.submit(); // ------ не так, конечно, но,  в общем, вызвать отсылку этого добра Ajax'ом

   container.replaceChild(el, placeholder ); // вернуть все взад...
}
</script>

<div class="hidden">
    <form id="uploadform" method="post" action="#" enctype="multipart/form-data" onsubmit="sendForm(this); return false;">
    </form>
</div>

...

<form method="post" action="/somefile">
    <input type="text" name="somebefore"><br>
 
       <input type="file" name="filename" onchange="sendfile(this)">

    <input type="text" name="someafter"><br>
    <input type="submit" value="Записать изменения">
</form>

И батона лишнего не надо. Впрочем, при желании такую функцию можно и на батон навернуть.




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Itsys
Дата 10.11.2008, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 9
Всего: 34



Все хорошо, но только придется при сабмите основной формы еще и удалять все реквизиты input type="file", в общем довольно много заморочек. Но если другого выхода нет.... будет пользовать этот smile Спасибо.
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема »


 




[ Время генерации скрипта: 0.1211 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.