代码之家  ›  专栏  ›  技术社区  ›  markratledge

php和jQuery联系人表单中的无休止循环错误

  •  1
  • markratledge  · 技术社区  · 14 年前

    我看不出这种联系方式中的无休止的循环。表单提交后,“谢谢”div会无休止地打印。我错过了什么?错误是php还是jQuery?(在工作文件中,JS通过 <script type="text/javascript" src="contact.js"></script> )

    谢谢

    <?php 
    if(isset($_POST['submitted'])) {
    if(trim($_POST['checking']) !== '') {
    $captchaError = true;
    } else {
    
    if(trim($_POST['email']) === '')  {
    $emailError = 'Please enter a valid email address';
    $hasError = true;
    } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
    $emailError = 'That\'s not a valid email address';
    $hasError = true;
    } else {
    $email = trim($_POST['email']);
    }
    }
    
    if(!isset($hasError)) {
    
    $emailTo = 'to email';
    $subject = 'site email';
    $body = "$email";
    $headers = 'From: webmail';
    mail($emailTo, $subject, $body, $headers);
    $emailSent = true;
    }
    } ?>
    
    
    <script type="text/javascript">
    
    $(document).ready(function() {
        $('form#contactForm').submit(function() {
            $('form#contactForm .error').remove();
            var hasError = false;
            $('.requiredField').each(function() {
                if($(this).hasClass('email')) {
                    var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
                    if(!emailReg.test(jQuery.trim($(this).val()))) {
                        var labelText = $(this).prev('label').text();
                        $(this).parent().append('<span class="error">&nbsp;&nbsp;<i>invalid email</i></span>');
    
                        hasError = true;
                    }
                }
            });
            if(!hasError) {
                $('#thanks').fadeOut('normal', function() {
    $(this).parent().append('<img src="../loading-small.gif" alt="Loading&hellip;" height="31" width="31" />');
    
                });
                var formInput = $(this).serialize();
                $.post($(this).attr('action'),formInput, function(data){
                    $('form#contactForm').slideUp("fast", function() {                 
                        $(this).before('<p class="thanks">&nbsp;<strong>Thanks!</strong>');
                        $(".thanks").delay(3000).fadeOut();
                    });
                });
            }
    
            return false;
    
        });
    });
    
    </script>
    
    
    <?php if(isset($emailSent) && $emailSent == true) { ?>
    
    <div class="thanks"></div>
    
    <?php } else { ?>
    
    <form action="http://mysite.com" id="contactForm" method="post">
    
    Sign up for email notification <input type="text" name="email" size="30" id="email" value="<?php if(isset($_POST['email']))  echo $_POST['email'];?>" class="requiredField email" />
    
    <?php if($emailError != '') { ?><span class="error"><?=$emailError;?></span><?php } ?>
    
    <input type="hidden" name="submitted" id="submitted" value="true" />
    <button type="submit">Send</form>
    
    <?php } ?>
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   mcgrailm    14 年前

    我对你的代码做了一些修改,让它在我的本地机器上运行,看看这个是否适合你

     <?php 
     if(isset($_POST['submitted'])) {
        if(trim($_POST['checking']) !== '') {
            $captchaError = true;
        }else{
            if(trim($_POST['email']) === '')  {
                $emailError = 'Please enter a valid email address';
                $hasError = true;
            } else if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", trim($_POST['email']))) {
                $emailError = 'That\'s not a valid email address';
                $hasError = true;
            } else {
                $email = trim($_POST['email']);
            }
        }
    
        if(!isset($hasError)) {
            $emailTo = 'to email';
            $subject = 'site email';
            $body = "$email";
            $headers = 'From: webmail';
            mail($emailTo, $subject, $body, $headers);
            $emailSent = true;
        }
     } 
     ?>
     <html>
        <head>
            <title></title>
            <script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
            <script type="text/javascript" src="js/jquery-ui.js"></script>
        <script type="text/javascript">
            $(document).ready(function() {
                $('form#contactForm').submit(function() {
                    $('.error').remove(); //remove the existing error messages before we submit
                    var hasError = false;
                    //lets go through all the required feilds
                    $('.requiredField').each(function() {
                        //check to see if we are processing email
                        if($(this).hasClass('email')) {
                            var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
                            if(!emailReg.test(jQuery.trim($(this).val()))) {
                               // var labelText = $(this).prev('label').text(); //this line seem useless
                                $(this).parent().append('<span class="error">&nbsp;&nbsp;<i>invalid email</i></span>'); // supply eror message
                                hasError = true; 
                            }
                        }
                    });
                    if(!hasError) {
                        $('#thanks').fadeOut('normal', function() {
                            $(this).parent().append('<img src="../loading-small.gif" alt="Loading&hellip;" height="31" width="31" />');
                        });
                        var formInput = $(this).serialize();
                        $.post($(this).attr('action'),formInput, function(data){
                            $('form#contactForm').slideUp("fast", function() {                 
                                $(this).before('<p class="thanks">&nbsp;<strong>Thanks!</strong>');
                                $(".thanks").delay(3000).fadeOut();
                            });
                        });
                    }
                    return false;
                });
            });
    
        </script>
     </head>
     <body>
    
    
    
     <?php if(isset($emailSent) && $emailSent == true) { ?>
    
     <div class="thanks"></div>
    
     <?php } else { ?>
    
     <form action="<?php echo $_SERVER['PHP_SELF']; ?>" id="contactForm" method="post">
    
     Sign up for email notification <input type="text" name="email" size="30" id="email" value="<?php if(isset($_POST['email']))  echo $_POST['email'];?>" class="requiredField email" />
    
     <?php if($emailError != '') { ?><span class="error"><?=$emailError;?></span><?php } ?>
    
     <input type="hidden" name="submitted" id="submitted" value="true" />
     <button type="submit">Send</form>
    
     <?php } ?>
        </body>
     </html>
    
        2
  •  1
  •   Josh K    14 年前

    看起来你想同时添加一个元素( <p class="thanks" $("#thanks").fadeOut 但似乎没有任何元素 id 属于 thanks

    我建议你更仔细地检查一下代码。我没有看到一个无休止的循环,但如果由于某种原因,该功能被反复触发,那么这将呈现相同的症状。