Ошибка бесконечного цикла в контактной форме php и jQuery - PullRequest
1 голос
/ 24 августа 2010

Arrg.

Я не могу заметить бесконечный цикл в этой контактной форме. 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 ]

1 голос
/ 24 августа 2010

Я сделал некоторые изменения в вашем коде и заставил его работать на моем локальном компьютере, чтобы посмотреть, работает ли этот код для вас

1 голос
/ 24 августа 2010

Похоже, вы пытаетесь одновременно добавить элемент (<p class="thanks"), имея существующий элемент (div). Вы можете сузить, какой из них? Также у вас есть $("#thanks").fadeOut, но, похоже, нет элемента с id из thanks.

Я бы посоветовал пройтись по коду немного осторожнее. Я не вижу бесконечного цикла, но если по какой-то причине функция будет запускаться неоднократно, то это будет иметь те же симптомы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...