没有这些建议的解决方案在使用PHP表单时为我工作。
本质上,我想要做的是有一个简单的表单,它会提交后隐藏。我使用jQuery来监听点击发生的时间,但这并不重要,因为页面刷新了。然后,我使用JS来阻止提交的默认行为(例如e.preventDefault();
)。我想出了...
我最终将表单动作设置为“#”,以便在提交表单后更改URL。 Javascript会读取散列的URL,并会隐藏/显示必要的元素,如果它存在几秒钟后会重定向。 是的,页面仍然刷新,但我通过使用带有页面刷新功能的JS来获得正确的行为。
这里是我的代码:
<?php
include_once 'db.php'; // includes login to DB
if('POST' === $_SERVER['REQUEST_METHOD'] && isset($_POST['submit']))
{
$ip = $_POST['publicIP'];
$sql_query = "INSERT INTO tablename(PublicIP) VALUES('$ip')";
mysql_query($sql_query);
}
?>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex, nofollow">
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
<script>var publicIP = '<?php echo $_SERVER['REMOTE_ADDR']; ?>';</script>
<style>
form, [type="submit"] {
max-width: 300px;
margin: 0 auto;
}
form {
border: 4px solid #757679;
border-radius: 5px;
box-shadow: 4px 4px 4px #A5A5A5;
}
[type="submit"] {
border: none;
height: 5em;
width: 100%;
font-size: 2em;
color: #353638;
background-color: #22D1F2;
text-shadow: -1px -1px 1px #949494;
}
input[name="publicIP"] {
display: none;
}
p { text-align: center; }
p, form {
-webkit-transition: all 2s;
-moz-transition: all 2s;
-ms-transition: all 2s;
-o-transition: all 2s
transition: all 2s;
}
.hidden {
display: none !important;
-webkit-transition: all 2s;
-moz-transition: all 2s;
-ms-transition: all 2s;
-o-transition: all 2s
transition: all 2s;
}
</style>
</head>
<body>
<p class="hidden">Thank you for visiting. You will be redirected within 3 seconds.</p>
<form action="#" method="POST">
<input type="text" name="publicIP">
<button type="submit" name="submit" value="Submit">Submit</button>
</form>
<script>
document.querySelector('input[name=publicIP]').value = publicIP;
</script>
<script>
function redirect() {
setTimeout(function() {
window.location = "https://google.com";
}, 3000);
}
if (window.top.location.href.indexOf('#') > 0) {
$('form').addClass('hidden');
$('p').removeClass('hidden');
redirect();
}
</script>
</body>
</html>
感谢,这是解决方案的一部分,第二部分是由ATTR的onsubmit更换到action属性。 – 2010-07-09 15:23:26