Ответ 1
<input type="submit" onclick="this.disabled = true" value="Save"/>
У меня возникла проблема: когда я пытаюсь отправить форму, нажав кнопку отправки, потребуется некоторое время, чтобы отправить запрос во время этого, если я снова нажму кнопку "Отправить", он снова отправит все параметры и параметры сохранен дважды, трижды.... так далее.
Я не знаю, как ограничить кнопку отправки, чтобы форма не отправлялась дважды. Я думаю, что когда я приступил к отправке, мне нужно отключить кнопку отправки, чтобы пользователь не мог ее снова щелкнуть, правильно ли это сделать?
<input type="submit" onclick="this.disabled = true" value="Save"/>
Отключение кнопки - одно из решений, но потенциально представляет проблему для пользователей клавиатуры, которые просто нажали кнопку ввода для отправки формы. В этом случае кнопка не будет отключена. Конечно-пожарный метод должен обрабатывать событие onsubmit
следующим образом:
(function () {
var allowSubmit = true;
frm.onsubmit = function () {
if (allowSubmit)
allowSubmit = false;
else
return false;
}
})();
(ну, как можно уверенно, с JS включен). Вы можете отключить кнопку как визуальное подтверждение конечному пользователю, что форма может быть отправлена только один раз.
Мне нравится простота и прямота ответа Зойдберга.
Но если вы хотите подключить этот обработчик, используя код, а не разметку (некоторые предпочитают держать разметку и код полностью разделенными), здесь используется Prototype:
document.observe('dom:loaded', pageLoad);
function pageLoad() {
var btn;
btn = $('idOfButton'); // Or using other ways to get the button reference
btn.observe('click', disableOnClick);
}
function disableOnClick() {
this.disabled = true;
}
или вы можете использовать анонимные функции (я их не поклонник):
document.observe('dom:loaded', function() {
var btn;
btn = $('idOfButton'); // Or using other ways to get the button reference
btn.observe('click', function() {
this.disabled = true;
});
});
Выполнение этого с помощью jQuery будет выглядеть очень похоже.
Если вы используете Rails с ujs, посмотрите disable_with
в http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-submit_tag
в хроме используйте это:
<input type="submit" onclick="this.form.submit();this.disabled = true;" value="Save"/>
Я знаю, что это старый, но вместо того, чтобы отключить, просто спрячьте кнопку, вы не можете щелкнуть то, что вы не видите.
<input type="submit" onclick="this.style.visibility = 'hidden'" value="Save"/>
если вы используете форму submit/post в PHP, используйте этот код
onclick="disableMe();" in type="submit"
его код кнопки отправки
<input name="bt2" type="submit" onclick="disableMe();" id="bt2" style="width:50px;height:30px; margin-left:30px;" value="Select" />
Лучший способ, как я нашел, это работает лучше всего, если вся информация в форме верна, затем добавьте атрибут к кнопке отправки. Incase пользователь должен вернуться и заполнить форму еще раз с правильной информацией.
document.querySelector('.btn').addEventListener('submit',function(){
if(input.value){
this.setAttribute("disabled", "true")
}
};
Вы можете добавить следующий скрипт на свою "страницу макета" (которая будет отображаться на всех страницах по всему миру).
<script type="text/javascript">
$(document).ready(function () {
$(':submit').removeAttr('disabled'); //re-enable on document ready
});
$('form').submit(function () {
$(':submit').attr('disabled', 'disabled'); //disable on any form submit
});
</script>
Затем при каждой отправке формы кнопки отправки отключаются. (Кнопки отправки повторно активируются при загрузке страницы.)
Если вы используете платформу валидации (например, jQuery Validation), вероятно, вам необходимо повторно включить кнопку (кнопки) отправки, если валидация также не удалась. (потому что ошибка проверки формы приводит к отмене отправки).
Если вы используете jQuery Validation, вы можете обнаружить аннулирование формы (отмена отправки формы), добавив следующее:
$('form').bind('invalid-form.validate', function () {
$(':submit').removeAttr('disabled'); //re-enable on form invalidation
});
Затем, если проверка формы не пройдена, кнопка (и) отправки снова/снова активируются.
Одно из решений состоит в том, чтобы не использовать <input>
в качестве кнопки отправки, а вместо этого использовать <div>
(или <span>
) в виде кнопки, имеющей атрибут onclick
:
<form method="post" id="my-form">
<input type="text" name="input1">
<input type="text" name="input2">
<input type="text" name="input3">
...
<div class="button" id="submit-button" onclick="submitOnce()">
Submit
</div>
</form>
И функция submitOnce
сначала удалит атрибут onclick
а затем отправит форму:
function submitOnce() {
document.getElementById('submit-button').removeAttribute('onclick');
document.getElementById('my-form').submit();
}