Intereting Posts
rss Xml путаница пространства имен Как отличить два списка выбора с одинаковым именем Laravel – модель запроса, если значения содержат определенную строку (взятую из ввода поиска) Laravel 4 Когда я извлекаю информацию из базы данных в текст ввода, добавляется 1 лишний пробел Как получить ближайшую дату по сравнению с массивом дат в PHP Генерация паролей в PHP 5.5 и настройка стоимости Предупреждение при использовании mysql_fetch_assoc в PHP Преобразование массива в массив в строку возможно ..? Обнаружение, если текущий пользователь имеет активную подписку Запросить набор точек в AREA на расстоянии от сегмента линии Дисплей X divs случайным образом из возможного Y ссылка symfony, чтобы изменить язык и остаться на странице Кнопка удаления, которая удаляет строку базы данных Подтвердить текстовое поле при нажатии кнопки Отправить PHP-массив из файла cookie: отображается только после обновления страницы?

показать div на форме submit без перенаправления

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

Я пробовал что-то с javascript, как это –

<script type="text/javascript"> function showHide() { var div = document.getElementById("hidden_div"); if (div.style.display == 'none') { div.style.display = ''; } else { div.style.display = 'none'; } } </script> 

И это отлично работает для отображения скрытого div на submit, но фактическая форма тогда не работает 🙁

Форма (с тем, что я пыталась сделать) выглядит так:

 <div id="wp_email_capture"><form name="wp_email_capture" method="post" onsubmit="showHide(); return false;" action="<?php echo $url; ?>"> <label class="wp-email-capture-name">Name:</label> <input name="wp-email-capture-name" type="text" class="wp-email-capture-name"><br/> <label class="wp-email-capture-email">Email:</label> <input name="wp-email-capture-email" type="text" class="wp-email-capture-email"><br/> <input type="hidden" name="wp_capture_action" value="1"> <input name="submit" type="submit" value="Submit" class="wp-email-capture-submit"> </form> <div id="hidden_div" style="display:none"><p>Form successfully submitted.</p> </div> 

Проблема возникает где-то между «return false» и действием формы (это то, где, по-моему, кодер плагина сделал перенаправление). Если я удалю 'return false', он перенаправляет. При этом «return false» форма не работает. Я не могу понять, как заставить форму работать, но не перенаправлять, т.е. просто покажите скрытый div, работа, и все! Нет перенаправления 🙂 Поблагодарили бы за вашу помощь.

Я покажу, как отправить форму с помощью jQuery, так как это то, что вам доступно:

Прежде всего, вы должны внести небольшое изменение в форму HTML. А именно, измените showHide() чтобы showHide(this) , что даст showHide() доступ к элементу формы. HTML должен быть:

 <div id="wp_email_capture"><form name="wp_email_capture" method="post" onsubmit="showHide(this); return false;" action="<?php echo $url; ?>"> <label class="wp-email-capture-name">Name:</label> <input name="wp-email-capture-name" type="text" class="wp-email-capture-name"><br/> <label class="wp-email-capture-email">Email:</label> <input name="wp-email-capture-email" type="text" class="wp-email-capture-email"><br/> <input type="hidden" name="wp_capture_action" value="1"> <input name="submit" type="submit" value="Submit" class="wp-email-capture-submit"> </form> <div id="hidden_div" style="display:none"><p>Form successfully submitted.</p> </div> 

Javascript для отправки формы и отображения div для успешной отправки:

 function showHide(form) { var serial = $(form).serialize(); $.post(form.action, serial, function(){ $('#hidden_div').show(); }); }; 

Что это делает:

  1. Сериализует данные формы, то есть преобразует ее в одну длинную строку, такую ​​как wp-email-capture-name=&wp-email-capture-email=&wp_capture_action=1 которая хранится в serial .
  2. Отправляет сериализованные данные в URL-адрес формы формы ( form.action )
  3. Если подача формы прошла успешно, она запускает обработчик success , который является третьим параметром для $.post() . Этот обработчик позаботится о отображении скрытого div. Я изменил код, чтобы использовать .show() javascript .show() , которая заботится о несоответствиях браузера.

Надеюсь, это полезно.