Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Вёрстка веб-сайтов > Форма в форме


Автор: jhonyxakep 27.12.2010, 06:19
Здравствуйте,

Использую на сайте архитектуру типа 

Код


<form action='' method='POST' name='actions'>

****разнообразные поля*****

    <form action='' method='POST' name='read'>
     ****поля*****
    </from>

****поля****
</from>



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

Как реализовать подобную структуру, не сильно правя код, и давая опере возможность валидно обрабатывать это?


Автор: steyraug 27.12.2010, 12:29
А что не работает конкретно? 

Код


<form action='' method='POST' name='actions'>

****разнообразные поля*****

    <form action='' method='POST' name='read'>
     ****поля*****
    </from>

****поля****
</from>



Закрывающий тег тоже должен быть </form>. А сделать то, что вы хотите, можно яваскриптом. Например при нажатии на кнопку-сабмит вложенной формы сабмитить вложенную форму. Типа так:


Код


<form action='' method='POST' name='actions'>
<!--тратата-->
    <form action='' method='POST' name='read'>
     <!--тратата-->
    <input type="submit" onclick="document.forms['read'].submit()" />
    </form>
<!--тратата-->
</form>



З.Ы: Если не секрет, для чего такую странную структуру используете?

Автор: jhonyxakep 27.12.2010, 14:54
Цитата(steyraug @  27.12.2010,  12:29 Найти цитируемый пост)
Закрывающий тег тоже должен быть </form>. А сделать то, что вы хотите, можно яваскриптом. Например при нажатии на кнопку-сабмит вложенной формы сабмитить вложенную форму. Типа так:


проблема не в том, что идет отсылка не той формы, дело в том, что после нахождения еще одного не закрывающего тега form, опера автоматически закрывает первый тег form



Цитата(steyraug @  27.12.2010,  12:29 Найти цитируемый пост)
З.Ы: Если не секрет, для чего такую странную структуру используете?


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

Автор: SelenIT 28.12.2010, 12:32
Цитата(jhonyxakep @  27.12.2010,  06:19 Найти цитируемый пост)
Проблема в том, что все броузеры, кроме оперы, справляются с такой не очень правильной структурой.

Да, это проблема, кроме шуток. Причем делают это каждый на свой лад. Если не ошибаюсь, в FF4 (с HTML5-парсером по умолчанию) проблемы уже не будет (будет как в Опере), в будущих Хромах, скорее всего, тоже.

Лучше переделать по-нормальному сразу. Если к тому же обе формы отправляются на один обработчик (судя по коду примера), то в чем вообще смысл того, что они разные? Проверять в обработчике, какая кнопка была нажата — и все дела. Разве что с клиентской валидацией могут быть небольшие трудности...

Автор: jhonyxakep 29.12.2010, 07:03
Цитата(SelenIT @  28.12.2010,  12:32 Найти цитируемый пост)
Лучше переделать по-нормальному сразу. Если к тому же обе формы отправляются на один обработчик (судя по коду примера), то в чем вообще смысл того, что они разные? Проверять в обработчике, какая кнопка была нажата — и все дела. Разве что с клиентской валидацией могут быть небольшие трудности...



те каждую кнопку обзывать по своему, и обрабатывать как массив?

Автор: bars80080 29.12.2010, 15:44
Цитата(jhonyxakep @  29.12.2010,  06:03 Найти цитируемый пост)
те каждую кнопку обзывать по своему, и обрабатывать как массив? 

у кнопки есть имя name="submit1" и значение value="отправить", какая кнопка будет нажата, та переменная и возникнет на сервере:

$_POST[''submit1"] будет существовать только в том случае, если была нажата кнопка submit1

Автор: jhonyxakep 31.12.2010, 03:41
bars80080, хмм, спасибо, понял.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)