Веб-форма отправки дубликатов электронных писем

0

Прежде всего, я знаю, что эта тема обсуждалась в прошлом, но мне не удалось прийти к выводу, поэтому любая помощь очень ценится. Я знаю немного html, но я не программист, у меня был кто-то, создающий для меня веб-сайт, но веб-форма часто отправляет повторяющиеся (даже 3 или 4 раза) электронные письма. Я считаю (предположим), что это связано с тем, что люди обновляют или нажимают кнопку отправки более одного раза. Я попытался отключить 'submit', но мне это не удалось. На этом этапе любое исправление поможет. До тех пор, пока я перестаю получать несколько писем от отправителей. Я постараюсь предоставить вам как можно больше информации. Это html-код формы:

<div class="form-input">
                        <div class="form-title">NAME</div>
                        <input id="form-name" type="text"></input>
                    </div>

                    <div class="form-input">
                        <div class="form-title">EMAIL</div>
                        <input id="form-email" type="text"></input>
                    </div>

                    <div class="form-input">
                        <div class="form-title">MESSAGE</div>
                        <textarea id="form-msg" type="text"></textarea>
                    </div>

                    <div class="form-input">
                        <div class="form-title">&nbsp;</div>
                        <input id="form-send" type="submit" value="SEND"></input>
                    </div>

                </div><!--end of form holder-->

                <div id="details-error">Please comlete all fields and include a valid email</div>
                <div id="form-sent">Thankyou for your enquiry - We will be in touch shortly!</div>
            </div>
        </div>
    </div>

</div>

следующий сценарий у меня:

// Contact Form Code

    $('#form-send').click(function(){

        var name = $('#form-name').val();
        var email = $('#form-email').val();
        var message = $('#form-msg').val();
        var option = $('#form-select').val();
        var error = 0;

        if(name === '' || email === '' || message === ''){
            error = 1;
            $('#details-error').fadeIn(200);
        }else{
            $('#details-error').fadeOut(200);
        }

        if (!(/(.+)@(.+){2,}\.(.+){2,}/.test(email))) {
            $('#details-error').fadeIn(200);
            error = 1;
        }

         var dataString = '&option=' + option +'&name=' + name + '&email=' + email + '&text=' + message;

            if (error === 0) {
                $.ajax({
                    type: "POST",
                    url: "mail.php",
                    data: dataString,
                    success: function () {
                        $('#details-error').fadeOut(1000);
                        $('#form-sent').fadeIn(1000);
                    }
                });
                return false;
            }

    });

});

И, наконец, mail.php:

    <?php
if ($_POST) {
    $name  = $_POST['name'];
    $email = $_POST['email'];
    $text  = $_POST['text'];
    $option = $_POST['option'];
    $headers = $option . "\r\n" . $name . "\r\n" . $email;


    //send email   
    mail("[email protected]", "Mail Enquiry", $text, $headers);
}

?>
  • 0
    Может быть, if (error === 0) { $('#form-send').hide();
Теги:
forms
email
submit

3 ответа

0

Вы должны изменить ввод на кнопку:

<input id="form-send" type="submit" value="SEND"></input>

в

<button id="form-send" type="button">SEND</button>

Поскольку в противном случае форма будет отправляться один раз через ajax, а затем снова через форму submit/page refresh

  • 0
    Я бы добавил type="button"
0

Если кнопка отправки нажата более одного раза, это может сработать.

Попробуйте добавить следующую строку кода сразу после $('#form-send').click(function(){

$('#form-send').attr('disabled', 'disabled');

Это отключит кнопку отправки после ее однократного нажатия. Если страница перезагружается пользователем, она будет включена.

Примечание: этот код не был протестирован.

0
        if (error === 0) {
            $.ajax({
                type: "POST",
                url: "mail.php",
                data: dataString,
                success: function () {
                    $('#details-error').fadeOut(1000);
                    $('#form-sent').fadeIn(1000);
                }
            });

Эта часть кода в # form-send click function - это то, что нужно делать, когда представление было успешным, вы можете изменить кнопку отправки, чтобы отключить дальнейшие клики, если вы чувствуете, что пользователи нажимают кнопку submit после того, как они уже отправили форму.

$('#form-send').attr('disabled','disabled'); // only disable the #form-send and not other forms that may need to still be submitted.
  • 0
    Вы можете изменить свой JQuery селектор. То, как вы сейчас это сделаете, отключит все отправки на странице.
  • 0
    @Sisyphus Я видел только одну отправку, поэтому я увлекся, лол.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню