Включить / отключить кнопку отправки с кодом сервера jQuery и Coldfusion

Я пытаюсь включить / отключить кнопку отправки с JQuery в моем коде. Прямо сейчас все работает, пока я не отправляю форму, она проходит проверку на стороне сервера и дает сбой, это отправляет меня на страницу ошибок с кнопкой возврата, когда я нажимаю кнопку возврата, я возвращаюсь на страницу формы и кнопка все еще отключена. Какие-нибудь мысли?

Код:

    <input type="submit" value="Submit" id="SubmitBtn" name="SubmitBtn">

    <script type="text/javascript" language="javascript">
    if(typeof window.submitForm == "undefined") {
        window.submitForm = "true";
    }

    $(function() {
        $("input:submit").button().click(function() {
            var submitCheck = window.submitForm;
            $(this).button("disable").val("Processing...");
            if(submitCheck==="true") {
                $(this).closest("form").submit();
            } else {
                $("input:submit").button("enable").val("Submit");
                return false;
            }
        });
    });
    $(window).unload(function() {
        setTimeout(function() {
    $("input:submit").button("enable").val("#ATTRIBUTES.enabledText#");
}, 300);
    });
    </script>

И вот что происходит: когда я нажимаю кнопку отправки, текст меняется на "Обрабатывается...", и кнопка становится отключенной. Код сервера работает, возвращает ошибку, и я нажимаю кнопку "Назад" (либо панель браузера, либо кнопку JavaScript: history.back()). Когда я возвращаюсь на страницу формы, текст снова меняется на "Отправить", но кнопка по-прежнему отключена. Как это исправить?

Разве браузер не перезагружается полностью при нажатии кнопки "Назад"? Я что-то упускаю?

Кроме того, предположим, что ошибка на стороне сервера не может быть изменена, и я не могу просто отправить обратно в саму форму (т. Е. Отобразится страница с ошибкой). Я также проверил переменную window.submitForm, и это возвращается.

2 ответа

Я бы использовал немного другой подход к JS сам... попробуйте что-то вроде этого:

<form id="FormId" name="FormName" action="sompage.cfm" method="post">
    ...
    <input type="submit" value="Submit" id="SubmitBtn" name="SubmitBtn">
    ...
</form>


<script type="text/javascript" language="javascript">
    $(document).ready(function(){
        /* when the script loads, set the value of the button and enable it */
        $("#SubmitBtn").removeAttr('disabled');
        $("#SubmitBtn").attr('value','Submit');
        /* when the button is clicked, submit the form */
        $("#SubmitBtn").click(function(){
            $("#SubmitBtn").attr('disabled','true');
            $("#SubmitBtn").attr('value','Processing...');
            $("form#FormId").submit();
        });
    });
</script>

Как вы можете видеть, он немного напряжен и вызывает перезагрузку при каждой перезагрузке страницы.

Я почти уверен, что это известная проблема FireFox. Единственный способ обеспечить согласованное взаимодействие во всех браузерах - это не отключать кнопку и просто использовать JS, чтобы убедиться, что они не делают двойную запись. Вот мое решение, я изменяю часть вашего макета, чтобы он был более абстрактным.

<script type="text/javascript" language="javascript">
    $(document).ready(function(){
        var validating = false;

        if(typeof window.submitForm == "undefined")
        {
            window.submitForm = "true";
        }

        validateForm = function(that)
        {
            if(!validating)
            {
                validating = true; //So that they can't double post

                var submitCheck = window.submitForm;
                $(that).val("Processing...");

                if(submitCheck=="true")
                {
                    $(that).closest("form").submit();
                }
                else
                {
                    $(that).val("Submit");
                    validating = false;
                    return false;
                }
            }
        }

        $(window).unload(function(){
            setTimeout(function() {$("input:submit").button("enable").val("#ATTRIBUTES.enabledText#");}, 300);
            var validating = false;
        });

        $("#SubmitBtn").click(function() {
            ValidateForm(this);
        });
    });
    </script>
Другие вопросы по тегам