2013-05-29 8 views
12
<input type="submit" name="btnADD" id="btnADD" value="ADD"/> 

, когда пользователь дважды нажимает кнопку «Добавить», от того, чтобы дважды отправлять данные с одинаковыми данными в таблицу. Так что, пожалуйста, помогите мне ограничить пользователя отправкой из дважды.Как запретить пользователям отправлять форму дважды

ответ

16

попробовать этот код ..

<input type="submit" name="btnADD" id="btnADD" value="ADD" onclick="this.disabled=true;this.value='Sending, please wait...';this.form.submit();" /> 
+3

Не будет ли это отправляться, если пользователь нажимает кнопку ввода в поле? –

+0

@Ziyan, используя сделал бы трюк с ответом Vijay :) –

+0

Также пользователь может снова включить кнопку, отредактировав код через браузер (Inspect Element) – foxt7ot

1

Когда пользователь нажимает кнопку отправки, отключите эту кнопку.

<form onSubmit="disable()"></form> 

function disable() 
{ 
    document.getElementById('submitBtn').disabled = true; 
    //SUBMIT HERE 
} 
+0

** + 1 ** Это хорошая идея, чтобы написать код полностью, и сделать jsFiddle слишком ';)' , –

+0

@NOX спасибо, я обновил код – PSR

+1

Я использую эту технику, но я просто столкнулся с проблемой. Отключенные входы не отправляются на сервер, и когда я сменил серверный скрипт на проверку '$ _POST ['submitBtn']' (потому что я добавил несколько кнопок отправки и должен был знать, что они использовали), он потерпел неудачу, потому что он не был задавать. – Barmar

1

Вы можете использовать JavaScript.

Приложить form.submit.disabled = true; к onsubmit событиям формы.

Подкованный пользователь может обойти его, но он должен помешать 99% пользователей отправлять два раза.

1

Вы можете отобразить сообщение об успешном использовании всплывающих с помощью кнопки OK, когда нажмите OK перенаправлять куда-то

1

Отключить Submit Button

$('#btnADD').attr('disabled','disabled'); 

     or 

$('#btnADD').attr('disabled','true'); 
4

Вы можете отключить кнопку после нажатия или скрыть ее.

<input type="submit" name="btnADD" id="btnADD" value="ADD" onclick="disableButton(this)"/> 

ЯШ:

function disableButton(button) { 
    button.disabled = true; 
    button.value = "submitting...." 
    button.form.submit(); 
} 
3

Вы можете сообщить пользователю, что он пьет слишком много кофе, но лучше всего отключена кнопка с JavaScript, например так:

$("#btnADD").on('click', function(btn) { 
    btn.disabled = true; 
}); 
+0

Хех. У меня просто была эта точная проблема, кто-то подал ту же форму 11 раз! При тестировании Оказалось, что у них есть быстрый триггерный палец. Это, в свою очередь, привело меня сюда ...: D – Chud37

21

После отправки формы присоедините обработчик с jQuery, который захватывает и «отключает» обработчик отправки:

var $myForm = $("#my_form"); 
$myForm.submit(function(){ 
    $myForm.submit(function(){ 
     return false; 
    }); 
}); 

Возврат «false» из обработчика отправки предотвратит отправку формы. Кнопки отключения могут иметь странные последствия для обработки формы. Этот подход в основном не имеет побочных эффектов и работает даже в формах с несколькими кнопками отправки.

+7

Очень понравилось. Очень ничего себе. Такая элегантность. – Chud37

+1

Кажется лучшим решением, потому что если вы отключите кнопку отправки перед отправкой сообщения, вы не сможете проверить значение кнопки отправки, поскольку оно не будет отправлено ... – Axi

+1

Очень хорошо. Для удобства использования это может быть хорошей идеей, чтобы этот обработчик также изменил внешний вид кнопок (отключить или иным образом дать понять пользователю, что «компьютер теперь скажет« нет », waitaminute ..») – st3inn

2

Я сделал решение, основанное на ответ rogueleaderr в:

jQuery('form').submit(function(){ 
    jQuery(this).unbind('submit'); // unbind this submit handler first and ... 
    jQuery(this).submit(function(){ // added the new submit handler (that does nothing) 
     return false; 
    }); 
    console.log('submitting form'); // only for testing purposes 
}); 
3

Если вы работаете с Java на стороне сервера сценариев, а также с помощью распорок 2, то вы смотрите эту ссылку, которая о переговорах об использовании маркера.

http://www.xinotes.org/notes/note/369/

Маркер должен быть сформирован и хранится в сессии для начальной страницы визуализации, когда запрос представляются вместе с маркером в первый раз, в распорках действия запустить поток с именем потока, что и token id и запустить логику, за которую запросил клиент, когда клиент снова отправляет один и тот же запрос, проверьте, продолжает ли поток (thread.getcurrentthread() прерывается), если он все еще запущен, а затем отправляет перенаправление клиента 503.

И Если вы не используете какие-либо рамки и ищете простоту тренировки. Вы можете воспользоваться помощью

java.util.UUID.randomUUID(); 

Просто поместите случайный UUID в сессии, а также в скрытом поле формы и на другой стороне (СПЯ страницы, где вы обработка других работ, как хранение данных в базе данных и т.д.) принимает вне поля uuid из сеанса и скрытой формы. Если поле формы совпадает с продолжением, удалите uuid из сеанса, и если это возможно, возможно, что форма была повторно отправлена.

Для вашей помощи я пишу фрагмент кода, чтобы дать представление о том, как достичь цели.

<% 
String formId=(java.util.UUID.randomUUID()).toString(); 
session.setAttribute(formId,formId); 
%> 
<input type='hidden' id='formId' name='formId' value='<%=formId%>'> 
+0

http://www.xinotes.org/notes/note/369/ Ссылка, которую вы поделили, если я использую этот метод, возможно, что второй запрос будет развлекаться и сначала отменяется. Я прав? –

1

Создать класс для формы, в моем случае я использовал: _submitlock

$(document).ready(function() { 
    $(document).on('submit', '._submitlock', function (event) { 

     // Check if the form has already been submitted 
     if (!$(this).hasClass('_submitted')) { 
      // Mark the form as submitted 
      $(this).addClass('_submitted'); 

      // Update the attributes of the submit buttons 
      $(this).find('[type="submit"]').attr('disabled', 'disabled'); 
      // Add classes required to visually change the state of the button 
      $(this).find('[type="submit"]').addClass("buttoninactive"); 
      $(this).find('[type="submit"]').removeClass("buttonactive"); 

     } else { 
      // Prevent the submit from occurring. 
      event.preventDefault(); 
     } 

    });}); 
0

Положите класс на всех кнопках типа = «отправить», как, например, «кнопка-disable- onsubmit»и использовать JQuery скрипт так:

$(function(){ 
    $(".button-disable-onsubmit").click(function(){ 
     $(this).attr("disabled", "disabled"); 
     $(this).closest("form").submit(); 
    }); 
}); 

Не забудьте сохранить этот код на Javascript файл родовым, так что вы можете использовать его во многих страницах. Подобно этому, он становится элегантным и простым в использовании. Кроме того, вы даже можете добавить еще одну строку, чтобы изменить значение текста, а также:

$(this).val("Sending, please wait."); 
1

Вы можете добавить класс в форму и ваш отправить кнопку и использовать JQuery:

$(function() { 
 

 
    // prevent the submit button to be pressed twice 
 
    $(".createForm").submit(function() { 
 
     $(this).find('.submit').attr('disabled', true); 
 
     $(this).find('.submit').text('Sending, please wait...'); 
 
    }); 
 
})

0

Моим решением для аналогичной проблемы было создать отдельную скрытую кнопку отправки. Он работает так:

  • Вы нажимаете первую, видимую кнопку.
  • Первая кнопка отключена.
  • onclick вызывает нажатие второй кнопки отправки.
  • Форма отправлена.

<input type="submit" value="Email" onclick="this.disabled=true; this.value='Emailing...'; document.getElementById('submit-button').click();"> <input type="submit" id='submit-button' value="Email" name="btnSubmitSendCertificate" style='display:none;'>

Я пошел по этому пути только для ясности для тех, кто работает над кодом. Существуют и другие решения, которые могут быть субъективно лучше.


Извините за нечетное форматирование, по какой-то причине блок кода не работает.

0

Добавьте класс в форме, когда представляется, останавливая пользователем двойного щелчка/подачи

$('form[method=post]').each(function(){ 
    $(this).submit(function(form_submission) { 
    if($(form_submission.target).attr('data-submitted')){ 
     form_submission.preventDefault(); 
    }else{ 
     $(form_submission.target).attr('data-submitted', true); 
    } 
    }); 
}); 
Смежные вопросы