当我试图找到解决问题的方法时,我只会遇到与我有相反问题的人。
我正在加载一个带有javascript的弹出式div。在div 中,我正在运行一个 PHP 表单。我的问题是,每当我提交表单时,我的弹出div 都会自动关闭。我希望弹出窗口在提交后在弹出窗口div 中显示时弹出窗口保持可见。
我对javascript和PHP都很陌生,虽然我试图找出出了什么问题(我假设问题出在我的javascript中),但我似乎无法找出问题所在。
这是我的Javascript,我从 istockphp.com
jQuery(function($) {
$("a.topopup").click(function() {
loading(); // loading
setTimeout(function(){ // then show popup, deley in .5 second
loadPopup(); // function show popup
}, 500); // .5 second
return false;
});
/* event for close the popup */
$("div.close").hover(
function() {
$('span.ecs_tooltip').show();
},
function () {
$('span.ecs_tooltip').hide();
}
);
$("div.close").click(function() {
disablePopup(); // function close pop up
});
$(this).keyup(function(event) {
if (event.which == 27) { // 27 is 'Ecs' in the keyboard
disablePopup(); // function close pop up
}
});
$("div#backgroundPopup").click(function() {
disablePopup(); // function close pop up
});
$('a.livebox').click(function() {
alert('Hello World!');
return false;
});
/************** start: functions. **************/
function loading() {
$("div.loader").show();
}
function closeloading() {
$("div.loader").fadeOut('normal');
}
var popupStatus = 0; // set value
function loadPopup() {
if(popupStatus == 0) { // if value is 0, show popup
closeloading(); // fadeout loading
$("#toPopup").fadeIn(0500); // fadein popup div
$("#backgroundPopup").css("opacity", "0.7"); // css opacity, supports IE7, IE8
$("#backgroundPopup").fadeIn(0001);
popupStatus = 1; // and set value to 1
actionResponse.setWindowState(LiferayWindowState.EXCLUSIVE);
}
}
function disablePopup() {
if(popupStatus == 1) { // if value is 1, close popup
$("#toPopup").fadeOut("normal");
$("#backgroundPopup").fadeOut("normal");
popupStatus = 0; // and set value to 0
}
}
/************** end: functions. **************/
}); // jQuery End
这是我的PHP:
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: Contactformulier';
$to = 'info@mywebsite.nl';
$subject = $_POST['subject'];
$human = $_POST['human'];
$body = "Afzender:'n $name'n'n E-Mail:'n $email'n'n Onderwerp:'n $subject'n'n Bericht:'n $message";
if ($_POST['submit']) {
if ($name != '' && $email != '') {
if ($human == '4') {
if (mail ($to, $subject, $body, $from)) {
echo '<p>Your message has been sent!</p>';
} else {
echo '<p>Something went wrong, go back and try again!</p>';
}
} else if ($_POST['submit'] && $human != '4') {
echo '<p>You answered the anti-spam question incorrectly!</p>';
}
} else {
echo '<p>You need to fill in all required fields!!</p>';
}
}
页面是否会重新加载,因此弹出窗口关闭?如果是这样,则需要阻止表单提交按钮的默认行为。
表单提交后,页面将重新加载。 您基本上有两个选项可以防止弹出窗口消失。
正如Jay Kravetz所建议的那样,一种选择是阻止默认表单提交并将其转换为Ajax请求。 您需要提交到"test2.php":
<form action="test2.php" method="post">
然后 test2.php 将只包含 "toPopup"div 中的 HTML。
然后,您将按照此SO帖子中所述使用jQuery ajax表单提交,以避免由于表单提交而重新加载页面。
第二种选择是更改测试.php以便内部
if ($_POST['submit']) {
echo '<div id="popup_content" class="showImmediately">';
//other logic here
} else {
echo '<div id="popup_content">';
}
然后在你的 css 中添加:
.showImmediately { display: block !important; }
除了CSS,你也可以在jQuery函数的底部添加它:
if ($('.showImmediately').length > 0) {
loading(); // loading
setTimeout(function(){ // then show popup, deley in .5 second
loadPopup(); // function show popup
}, 500); // .5 second
}