toggle () div с отправкой данных формы

это моя проблема: после отправки формы я хочу увидеть некоторые данные из базы данных (MySQL) для выбранного объекта в div-элементе. Этот элемент был настроен на «display: none» при запуске страницы.

Если пользователь нажимает кнопку, <div> должен стать видимым, а данные должны быть видны. С помощью другого щелчка <div> снова станет невидимым. Для этого я использую функцию jQuery toggle() .

Если я использую элемент ввода с “type=submit” форма отправляется, и я получаю данные из-за операторов php в <div> . Но, к сожалению, <div> немедленно исчезнет. Я думаю, что сообщение снова начинает страницу по умолчанию, и поэтому для параметра <div> снова установлено значение “display:none” .

Если я использую элемент button вместо этого, я могу переключить <div> но форма не отправлена, $ _POST не заполнена, и поэтому я не получил никаких данных из базы данных для объекта. Идея заключалась в том, чтобы использовать имя объекта для установки значения переменной $ id для запуска SQL-оператора.

Я попытался сохранить исходный код очень коротким, и поэтому я не программировал здесь инструкции, связанные с базой данных. Это не проблема – я могу получить данные для объекта, когда я использовал обычную функцию submit и no toggle для <div> .

Как вы можете видеть в исходном коде, я попробовал его с тремя вариантами ввода. Но ничто из этого не работает, как будто я хочу, чтобы он работал.

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

Как я могу решить эту ситуацию? Вот мой исходный код:

 <!DOCTYPE html> <html> <head> <style> #wbtogdiv { width:30%; height:100px; border:6px solid green; display:none; } </style> <script language="JavaScript" src="jquery-1.11.2.js"></script> <script language="JavaScript">$(document).ready(function(){$("#btn").click(function(){$("#wbtogdiv").fadeToggle(20);return true;});});</script> </head> <body style="color:#FF004C;"> <!-- I tried also with this action="<?php $_SERVER['PHP_SELF']?>" but of course then the page is fired again and the <div> is not visible due to the CSS--> <form method="post"> <input type="text" name="customer"> <input type="submit" id="btn" value="submit:Toggle div green"> <!-- <input type="submit" id="btn" value="submit:Toggle div green"> <input type="button" id="btn" value="input button: Toggle div green"> <button type="button" id="btn">Button: Toggle div green</button> --> </form> <div id="wbtogdiv">KASTEN: <?php echo print_r($_POST)?></div> </body> </html> 

По умолчанию элемент button отправляет форму, однако вы переопределяете это поведение, устанавливая type="button" . (Согласен, я согласен).

Поскольку вы уже используете jQuery, вы можете воспользоваться встроенной поддержкой AJAX и переопределить поведение отправки формы по умолчанию. Это подход, который деградирует изящно: если пользователь работает в среде, которая не выполняет JavaScript, они будут отправлять форму, используя поведение браузера по умолчанию, и все еще видят результаты. (Вы бы отредактировали свой CSS, чтобы сделать ваш div видимым по умолчанию в этом случае и использовать JS, чтобы скрыть его во время загрузки страницы.) DEMO jsFiddle

 var $form = $('form'); var $resultDiv = $('#wbtogdiv'); $resultDiv.hide(); var successHandler = function(data, textStatus, jqXhr) { $resultDiv.html(data); $resultDiv.fadeToggle(200); }; $form.submit(function(ev) { ev.preventDefault(); if (! $resultDiv.is(':visible')) { $.post( '/path/to/your/script', $form.serialize(), successHandler ); } else { $resultDiv.fadeToggle(200); } }); 

(Кроме того, поскольку это тестовое сообщение, возможно, вы не делаете этого в своем реальном коде, но, ради бога, будьте предельно внимательны к сценарию, который раскрывает информацию о его внутренней работе с пользователем или сценарий, который эхо пользовательский контент, не привязанный к экрану, обратно на веб-страницу. Это первые шаги к довольно серьезному отверстию безопасности.)

Вы можете попробовать следующее:

Не использовать display: none; в CSS и вместо этого сделать это с помощью JQuery.

 <style> #wbtogdiv { width:30%; height:100px; border:6px solid green; } </style> 

И это то, что вы делаете:

 <div id="wbtogdiv" form-submitted = "no">KASTEN: <?php echo print_r($_POST)?></div> <script> $(document).ready(function(){ if($('#wbtogdiv').attr('form-submitted') == "no") { $('#wbtogdiv').hide(); } }); $(document).ready(function(){ $("#btn").submit(function(event){ $("#wbtogdiv").fadeToggle(20); return true; $("#wbtogdiv").attr('form-submitted', "yes"); }); }); </script>