Кнопка включения / выключения отправки с кодом сервера jQuery и Coldfusion - PullRequest
1 голос
/ 17 марта 2011

Я пытаюсь включить / отключить кнопку отправки с 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 ]

2 голосов
/ 18 марта 2011

Я бы сам использовал немного другой подход к 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>

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

0 голосов
/ 17 марта 2011

Я почти уверен, что это известная проблема 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...