提交后清除表单字段

时间:2015-04-11 10:36:42

标签: javascript php html forms

我已经阅读了同一个问题的其他答案,但我遇到了问题,并会对一些建议表示感谢。 我在我的html文件中有javaScript,并且在提交按钮上有一个Onclick()语句来清除表单,但现在电子邮件确认消息没有出现,并且不再发送消息。如果我把onClick();在表单的主体中,只需单击表单域即可清除每个字段。我真的希望能够提交一条消息,然后在成功发送时清除表单。

   <script type ="text/javascript"> 
            function clearform () {
 document.getElementById("name").value="";
 document.getElementById("email").value="";
 document.getElementById("subject").value="";
 document.getElementById("message").value="";
}
</script>

            <div class="row">
                <div class="col-sm-6">
                    <h2>Send us a message</h2>
                    <!-- action="replace it with active link."-->
                    <form action="contact.php" method="post" name="contact-form" id="contact-form" >
                        <label for="name">Your Name <span>*</span></label>
                        <input type="text" name="name" id="name" value="" required />
                        <label for="email">Your E-Mail <span>*</span></label>
                        <input type="text" name="email" id="email" value="" required />
                        <label for="subject">Subject</label>
                        <input type="text" name="subject" id="subject" value="" />
                        <label for="message">Your Message</label>
                        <textarea name="message" id="message"></textarea>
                        <div class="row">
                            <div class="col-sm-6">
                                <input type="submit" name="sendmessage" id="sendmessage" value="Submit" onclick="clearform();" />
                            </div>
                            <div class="col-sm-6 dynamic"></div>
                        </div>
                        </form>

然后我在PHP文件中有以下内容:

    private function sendEmail(){
    $mail = mail($this->email_admin, $this->subject, $this->message,
         "From: ".$this->name." <".$this->email.">\r\n"
        ."Reply-To: ".$this->email."\r\n"
    ."X-Mailer: PHP/" . phpversion());

    if($mail)
    {
        $this->response_status = 1;
        //$this->response_html = '<p>Thank You!</p>';
    }
}


function sendRequest(){
    $this->validateFields();
    if($this->response_status)
    {
        $this->sendEmail();
    }

    $response = array();
    $response['status'] = $this->response_status;   
    $response['html'] = $this->response_html;

    echo "<span class=\"alert alert-success\" >Your message has been received. Thanks!</span>";
    header("Location: contact.php");// redirect back to your contact form
    exit;


   }

}


$contact_form = new Contact_Form($_POST, $admin_email, $message_min_length);
$contact_form->sendRequest();

?>

2 个答案:

答案 0 :(得分:0)

您必须确保事件继续传播并提交表单:

function clearform () {
    document.getElementById("name").value="";
    document.getElementById("email").value="";
    document.getElementById("subject").value="";
    document.getElementById("message").value="";
    return true;
}

答案 1 :(得分:0)

没有ajax表单帖子

如果您没有使用ajax提交表单(您似乎没有使用它),则无需使用javascript清除表单,表单将在提交时重新加载并且它将为空

但是,您的location重定向存在问题:您之前输出的是html,因此重定向可能会失败。

在重定向之前不应输出任何内容,并且可以向网址添加查询变量,以便在表单加载时显示成功消息:

if($this->response_status)
{
    $this->sendEmail();
}

header("Location: contact.php");// redirect back to your contact form
exit;

使用ajax发布表单

如果您使用的是ajax(响应变量的设置似乎表明您想要这样做),您应该将clearform ()调用放入ajax调用的success函数中并删除{{1在php中重定向。相反,您可能想要返回/输出结果:

header()