Отключение множественной отправки в формах HTML - PullRequest
2 голосов
/ 27 января 2010

Если мой пользователь нажимает более одного раза на кнопку отправки формы, он, по сути, отправляет несколько запросов GET / POST (в зависимости от настроек формы).

Я считаю, что отключение кнопки отправки с помощью JS немного проблематично, потому что, если пользователь пытается остановить (ESC / Stop Button), он не сбрасывает кнопку (если вы не поймете это и не обработаете это снова с помощью JS) , если пользователь возвращается (кнопка «Назад») со следующей страницы, кнопка «Отправить» по-прежнему отключена (по крайней мере, в Firefox).

Как лучше отключать отправку нескольких форм.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 27 января 2010

Javascript прекрасно работает для меня. Убедиться в том, что кнопки (и) снова включены, когда пользователь прерывает свою отправку, является частью удобства использования.

Если вы не хотите отключать свои кнопки с помощью javascript, то, возможно, на стороне сервера вы можете перехватывать повторяющиеся сообщения за определенный промежуток времени?

1 голос
/ 27 января 2010

привязывает отключение к отправке формы, а затем отключает его к загрузке страницы (для сброса при обновлении / возврате):

function disableSubmits( domNode, toDisable )
{
    domNode = domNode || document.getElementsByTagName( 'body' )[ 0 ];

    toDisable = !!toDisable;

    for( var i = 0; i < inputs.length; ++i )
    {
        if( 'submit' === inputs[i].getAttribute( 'type' ) )
        {
            inputs[i].disabled = toDisable;
        }
    }
}

var onloadhandler = function( )
{
    var theForm = document.getElementById( 'theForm' );

    theForm.onsubmit = function( ){ disableSubmits( theForm, true ); }

    disableSubmits( theForm, false );
};

var old = window.onload;

window.onload =  'function' === typeof old
                 ? function( ){ old(); onloadhandler(); }
                 : onloadhandler;
1 голос
/ 27 января 2010

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

...