我试图在表单在按下提交后验证用户输入后使用jquery淡出div。我试图避免表单在验证之前淡出,以防用户没有输入正确的信息。
我想知道我是否可以在我的php标签之间添加脚本标签,这样一旦验证完成,我只需快速运行javascript,然后选择其余的php,如下: / p>
<?php
$name = trim($_POST['name']);
$email = $_POST['email'];
$comments = $_POST['comments'];
$site_owners_email = 'zeckdude@gmail.com'; // Replace this with your own email address
$site_owners_name = 'Chris Seckler'; // replace with your name
if (strlen($name) < 2) {
$error['name'] = "Please enter your name";
}
if (!preg_match('/^[a-z0-9&\'\.\-_\+]+@[a-z0-9\-]+\.([a-z0-9\-]+\.)*+[a-z]{2}/is', $email)) {
$error['email'] = "Please enter a valid email address";
}
if (strlen($comments) < 3) {
$error['comments'] = "Please leave a comment.";
}
if (!$error) {
require_once('phpMailer/class.phpmailer.php');
$mail = new PHPMailer();
$mail->From = $email;
$mail->FromName = $name;
$mail->Subject = "Website Contact Form";
$mail->AddAddress($site_owners_email, $site_owners_name);
$mail->AddAddress('zeckdude@gmail.com', 'Chris Seckler');
$mail->Body = $comments;
$mail->Send();
?>
<script type="text/javascript">
$(function(){
$('#container').fadeOut(1000);
});
</script>
<?php
echo "<li class='success'> Congratulations, " . $name . ". We've received your email. We'll be in touch as soon as we possibly can! </li>";
echo nl2br("<b>Message Sent:</b>
From: $name
Email: $email
Message: $comments
<br/><a href='http://www.google.com'>Link</a>");
} # end if no error
else {
$response = (isset($error['name'])) ? "<li>" . $error['name'] . "</li> \n" : null;
$response .= (isset($error['email'])) ? "<li>" . $error['email'] . "</li> \n" : null;
$response .= (isset($error['comments'])) ? "<li>" . $error['comments'] . "</li>" : null;
echo $response;
} # end if there was an error sending
?>
答案 0 :(得分:3)
是的,但你的结果不符合你的意图。
PHP全部在文档发送到客户端(用户)之前执行。 Javascript在客户端收到文档后执行。
相关评论较少: 您的脚本容易受到跨站点脚本(XSS)的攻击。在解决此问题之前,请勿在真实网站上使用它。
你可以完成你想要做的事情的一种方法是让php代码的第二部分在隐藏<div id='content' style="display:none">...other content...</div>
的div中呈现html内容。然后,在淡入淡出完成后的javascript中,使用javascript清除div中的display:none属性使其显示。
答案 1 :(得分:0)
为什么不尝试一下?您已经编写了代码。从我在您的代码中看到的,您应该能够毫无问题地执行此操作。
答案 2 :(得分:0)
不,这肯定不会按照您想要的方式运行 - 您的PHP脚本没有与浏览器进行那种亲密的交互,也无法返回并使现有表单以这种方式执行其他操作。一旦php开始生成输出并发送页面标题,它就是一个全新的网页,你不能让旧网页消失。
您应该考虑查看jquery forms plugin。然后,您可以使用ajax提交表单,并保持活动表单可见。一旦你从ajax提交中成功返回,然后淡化表格并继续下一件事
答案 3 :(得分:0)
我实际上只是尝试过上面展示给你的代码并且效果很好。至少它看起来不错。这是现场直播:Example Form
我现在要做的就是让最后回声的消息实际上淡入而不是只是弹出。
我认为George Deglin的答案,
拥有php代码的第二部分 在div中呈现html内容 这是隐藏的。
<div id='content' style="display:none">
...other content...
</div>
然后,在javascript中 淡入淡出完成后,使用 javascript清除显示:无 来自div的属性来实现它 出现。
最有可能为此工作。