показать скрытый div при перезагрузке после нажатия кнопки submit_form

Мне нужно показать div при перезагрузке страницы после того, как пользователь нажмет кнопку отправить форму.

В частности, у меня есть контактная форма PHP в разделе "показать/скрыть". При нажатии на контакт отображается и скрывается контактная форма. И отображение/скрытие js, и контактная форма php работают отлично. Когда пользователь нажимает отправить -- страница перезагружается, и в div контактной формы записывается "сообщение отправлено". Но когда страница перезагружается, форма находится в элементе div, для которого в CSS задано значение display: none; — именно так страница загружается по умолчанию.

После отправить мне нужно, чтобы страница перезагрузилась и отобразила контактную форму в скрытом div. Я не совсем уверен, с чего начать, так как весь javascript для страницы перезагружается по умолчанию. Кроме того, поскольку это все PHP, я не могу установить или вызвать якорь в div content_form.

Спасибо!


person Community    schedule 20.08.2009    source источник


Ответы (4)


Я бы предпочел решение CSS над решением JS.

if ($form_is_valid)
    echo '<style type="text/css">#contact { display: block; }</style>';

Редактировать. Просто чтобы сделать все немного чище, я предлагаю добавить класс в вашу форму, если она была успешно отправлена. Что-то вроде этого:

$class = $form_is_valid ? ' class="submitted"' : '';
echo '<form method="..." action="..."' . $class . '>...</form>';

Затем вы можете просто сделать определение CSS, которое следует за определением display: none;, например:

form.submitted { display: block; }
person Josh Leitzel    schedule 20.08.2009
comment
Спасибо! Я использовал это, чтобы указать $send_mail на новый div в CSS и $invalid обратно на тот же div. Работает хорошо! Спасибо! - person ; 23.08.2009
comment
Рад помочь! Пожалуйста, не забудьте отметить это как принятый ответ, если он вам помог. - person Josh Leitzel; 24.08.2009

Вы можете использовать некоторый PHP-код для написания скрипта только в том случае, если форма была успешно отправлена.

Затем просто повторите JavaScript, чтобы настроить отображение элемента на блокировку (аналогично следующему коду PHP):

if($form_is_valid)
{
    echo '<script type="text/javascript">'
       . 'document.getElementById("elementID").style.display = "block";'
       . '</script>';
}
person Breakthrough    schedule 20.08.2009
comment
Так что вы могли легко видеть, что я сделал; это ни к чему. - person Breakthrough; 20.08.2009

Ответ Breakthrough должен работать нормально, но лично мне не нравится размещать в разметке какие-либо сообщения об успехе или ошибках, даже скрытые CSS, если это не так во время загрузки страницы. Поскольку страница все равно перезагружается, это избавит от необходимости использовать какой-либо JavaScript или CSS для решения этой проблемы:

<?php if ($form_is_valid) include('SnippetFileWithSuccessMessageDivInIt.php') />
person RwwL    schedule 20.08.2009

Если вы загружаете форму с отправленным содержимым, вы можете использовать javascript для обнаружения наличия текста в полях ввода. Если какой-либо контент присутствует, установите display: block.

person Rob Drimmie    schedule 20.08.2009
comment
Это может быть проблематично, если в форме есть значения по умолчанию. - person Josh Leitzel; 21.08.2009
comment
да. В этом случае, я полагаю, вы могли бы сравнить значения по умолчанию, но это определенно становится обременительным. - person Rob Drimmie; 21.08.2009