повторное нажатие сабмит

Главные вкладки

Аватар пользователя kzuser kzuser 20 февраля 2008 в 23:21

в друпале нет защиты от повторного нажатия конпки сабмит в результате много раз можно постить одно и тоже

как решить проблему кто знает

Комментарии

Аватар пользователя batbug batbug 15 июля 2008 в 10:49

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

$(document).ready(function() {
    $('input[type=submit]').click(function() {
      $(this).siblings('input[type=submit]').hide();
      $(this).hide();
      $('<p class="loading">Ok...</p>').insertAfter(this).slideDown('fast');
    })
  });

вставьте его в конец страницы и будет вам счастье.

Суть работы: при нажатии на кнопку САБМИТ все кнопки исчезают и нажать их повторно нельзя Smile Посмотреть в действии можно на моем сайте.

Аватар пользователя VladSavitsky VladSavitsky 20 июня 2008 в 14:23

Prevent multiple form processing: causing duplication of nodes/users - обсуждение проблемы на английском. Ошибка исправлена в Д6 и есть порт для Д5 (в самом конце статьи)...

Drupal CookBook - Готовить может каждый!Решение было сохранено на сайте DrupalCookBook.ru:

Защита от повторного сохранения форм.

Авторы, предложившие решения, также указаны в сохранённой статье.

Аватар пользователя Valeratal Valeratal 15 июля 2008 в 9:34

Запихнул код в page.tpl
Кнопки пропадают
Остался вопрос, а как сделана у Вас эта полоска (полосатая) ?
чтобы пользователь понимал, что "процесс идет" Smile

Аватар пользователя batbug batbug 15 июля 2008 в 10:51

через цсс

p.loading {
background:transparent url(/sites/all/themes/liveang/ajax-loader1.gif) no-repeat scroll 0% 50%;
color:blue;
font-weight:bold;
height:30px;
padding-left:35px;
padding-top:10px;
width:60px;
}

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

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

Аватар пользователя Zonder Zonder 27 ноября 2008 в 18:54

У меня после нажатия, картинка отображается, но не проигрывается. Это баг такой у броузера?
Смотрел под IE7

Аватар пользователя Valeratal Valeratal 28 ноября 2008 в 15:26

у данного решения есть баг, к сожалению
Продвинутые люди нажимают enter при автодобавлении. А наша автоскрываемая кнопка сабмит принимает это как сигнал "все, шухер, прячуюсь) и бедный пользователь даже зарегиться не может Smile

Аватар пользователя kyky kyky 12 декабря 2008 в 8:09

Ну просто нужно добавить в этот скрипт обработку события нажатия клавиши "Энтер"

$(window).keydown(function(event){
  switch (event.keyCode) {
    // ...
    // тут вычислить код клавиши
    // если код равен коду "Enter"
    // то аналогичные действия
    // ...
  }
});

этот скрипт выводить в блоке только на странице /node/add*

в разных браузерах разные коды клавиш. См. http://unixpapa.com/js/key.html