1

我正在创建一个向我发送电子邮件但不加载新页面的表单,它只是修改了同一页面上的一些 HTML 和 CSS 值。

我已经尝试实现它,它接近完成,它只是无法正常工作。单击提交后,它不会验证表单,它会加载 PHP 页面并说“谢谢...”,然后我收到一封电子邮件。如果您能帮助我理解和调试它,我将不胜感激。谢谢!

我可以确认 jQuery 已正确链接。我按以下顺序设置:

<html>
<head>
 <script> (link for jquery)
 <style>
 <script>
   validateForm() JavaScript
   jQuery
<body> (no loading functions via onload)

HTML 表单:

<form  id='form' method='post' action='sendemail.php'>
                    Name: <br />
                    <input type="text" id="name" name="name" />
                    <br /><br />
                    Email: <br />
                    <input type="email" id="email" name="email" />
                    <br /><br />
                    Subject: <br />
                    <input type="text" id="subject" name="subject" />
                    <br /><br />

                    Comments: <br />
                    <textarea id="comments" name="comments" rows="10" cols="60"></textarea>
                    <br /><br />

                    <input type="image" src="..." name="myFormSubmitted" value="Submit" />        
                </form>
                <div id="formResponse"></div>

PHP - sendmail.php:

<?php
if(isset($_POST['myFormSubmitted'])) {
    $message = '';

    // Construct the message
    $message .= <<<TEXT
        Name: {$_POST['name']}
        Email: {$_POST['email']}
    Subject: {$_POST['subject']}
    Comments: {$_POST['comments']}  
        {$checkString}
TEXT;

    $to = 'sendMeHere@example.com';
    $subject = $_POST['subject'];
    $from = $_POST['name'];
    $fromEmail = $_POST['email'];

    $header = 'From: ' . $from . '<' . $fromEmail . '>';

    // Send the email
    mail($to, $subject, $message, $header);

    echo 'Thank you for your Email. We will get in touch with you very soon.';
}
?>

jQuery:

//On form submit, call validateForm, then post to PHP if validated
            $("#form").submit(function(e) {
                if (validateForm()) {
                    $.post( 
                        'sendemail.php', 
                        {
                            name: $('#name').val(), 
                            email: $('#email').val(), 
                            comments: $('#comments').val(), 
                            myFormSubmitted: 'yes'
                        }, 
                        function(data) {
                            $("#formResponse").html(data).fadeIn('100'); //Place echo in div
                            //Modify HTML & CSS here
                            $('#name, #email, #comments').val(''); //Clear the inputs - I don't understand this line
                        }, 
                        'text'
                    );
                }

                //Prevent event from bubbling
                e.preventDefault();
                e.stopPropagation();

                return false;
            }); 

JavaScript 验证函数:

            $(document).ready(function() {
            function validateForm() {
                var validName = false;
                var validEmail = false;
                var validSubject = false;
                var validComments = false;

                //Perform validation here...

if (validName && validEmail && validSubject && validComments) {
return true;
} else {
return false;
}
});
4

3 回答 3

0

只是一种替代解决方案。您可以在 input[type=image] 的点击事件中提交触发表单提交。我还没有检查它,但希望它有效!

$('input[type=image]').click(function(e){
           e.preventDefault();
           $('#form').submit();
 });
于 2013-07-22T16:39:17.530 回答
0

删除 html 表单标签上的“action='sendemail.php'”属性。

于 2012-12-06T23:14:32.560 回答
0

您应该将您的 javascript 包装在一个准备好的事件处理程序中,如下所示:

$(document).ready(function() {
    // Your javascript here...
});
于 2012-12-06T21:28:14.487 回答