2010-07-29 2 views
30

У меня есть кнопка отправки в конце формы.Как отключить кнопку отправки после ее нажатия?

Я добавил следующее условие кнопку отправки:

onClick="this.disabled=true; 
this.value='Sending…'; 
this.form.submit();" 

Но когда он переходит на следующую страницу, параметры не проходят и передаются нулевые значения.

+0

Возможно, это не ошибка вызовов, которые вы показываете. Пожалуйста, покажите полный HTML-код формы. –

+3

Не используйте событие onclick кнопки submit - используйте событие onsubmit формы. В противном случае вы не поймаете представление с клавиатуры. – Nick

ответ

26

Возможно, вы отправляете форму дважды. Удалить this.form.submit() или добавить return false в конец.

вы должны закончить с onClick="this.disabled=true; this.value='Sending…';"

+12

Осторожно, хотя это не работает в IE8 и Chrome ... ну, он работает, потому что он делает то, что говорит скрипт, но следствием этого является то, что он также отключает отправку формы. –

+0

@ShawndeWet: отправить правильный метод –

+0

См. Ответ @ andreaskoberle –

3

Я не думаю, что вам нужно this.form.submit(). Код отключения должен быть запущен, затем он перейдет по клику, который щелкнет форму.

+0

Если вы не поместите «this.form.submit()», тогда форма не будет отправляться в этом случае. – mchampaneri

1

Ваш вопрос сбивает с толку, и вы действительно должны размещать код, но это должно работать:

onClick="this.disabled=true; this.value='Sending...'; submitForm(); return false;" 

Я думаю, что когда вы используете this.form.submit() это делать то, что происходит естественным образом когда вы нажмете кнопку «Отправить». Если вы хотите отправить одну страницу, вам следует изучить использование AJAX в методе submitForm() (см. Выше).

Кроме того, возврат false в конце значения атрибута onClick подавляет событие по умолчанию при запуске (в этом случае отправляет форму).

9

Отключенные элементы HTML-форм не отправляются вместе со значениями post/get при отправке формы. Поэтому, если вы однажды отключили кнопку отправки, и эта кнопка отправки имеет набор атрибутов name, она не будет отправлена ​​в значениях post/get, так как элемент теперь отключен. Это нормальное поведение.

Способ преодоления этой проблемы - использование элементов скрытой формы.

+0

Это сработало лучше всего для меня, спасибо! – Josh

1

Если вы отключите кнопку, то ее пара значений name = value действительно не будет отправлена ​​в качестве параметра. Но остаток параметров должен быть отправлен (пока их соответствующие входные элементы и родительская форма не будут отключены). Вероятно, вы тестируете кнопку только или другие поля ввода или даже форма отключены?

60

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

onClick="this.form.submit(); this.disabled=true; this.value='Sending…'; " 
+4

Это лучший ответ. Некоторые браузеры не знают, чтобы отправить форму заранее, и это решение работает вокруг этого. – Nathanael

+4

onclick должен быть строчным. – MadMaardigan

+0

Не будет работать, как ожидается, если сначала будет инициирована проверка HTML5. – cyrotello

4

трюк с задержкой на кнопку отключить, и отправить форму, вы можете использовать window.setTimeout('this.disabled=true',0); да еще и с 0 MS работает

+0

, но что, если пользователь нажимает кнопку за эту часть времени? – jospratik

+0

Какая часть? Работает даже с 0 –

3

Использование JQuery, вы можете сделать это ..

$("#submitbutton").click(
    function() { 
     alert("Sending..."); 
     window.location.replace("path to url"); 
    } 
); 
+0

Спасибо коллеге – maas

1

Другое решение i've нас ed - переместить кнопку, а не отключать ее. В этом случае у вас нет таких «отключенных» проблем. Наконец, вы действительно хотите, чтобы люди не нажимали дважды, если кнопки там нет, они не могут этого сделать.

Вы также можете заменить его другой кнопкой.

0

    A better trick, so you don't lose the value of the button is 

    function showwait() { 
    document.getElementById('WAIT').style['display']='inline'; 
    document.getElementById('BUTTONS').style['display']='none'; 
    } 

код компресс, чтобы показать в DIV

стиль

ID = WAIT = "дисплей: нет"> Текст для отображения (конец Div)

обертывание кода, чтобы скрыть в DIV

id = КНОПКИ style = "display: inline"> ... кнопки или что скрывать с
onclick = "showwait();" (конец ДИВ)

1
function xxxx() { 
// submit or validate here , disable after that using below 
    document.getElementById('buttonId').disabled = 'disabled'; 
    document.getElementById('buttonId').disabled = ''; 
} 
0

В моем случае это было необходимо.

Disable submit button on form submit

Это отлично работает в Internet Explorer и Firefox без него, но он не работает в Google Chrome.

Проблема в том, что вы отключите кнопку, прежде чем она сможет инициировать событие отправки.

+1

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

0

Вот пример перехода, который расширяется по решению Андреаса Кёберле. Он использует JQuery для обработчика событий и документов готового события, но те, может быть включен в обычный JS:

(function(document, $) { 

    $(function() { 
    $(document).on('click', '[disable-on-click], .disable-on-click', function() { 
     var disableText = this.getAttribute("data-disable-text") || 'Processing...'; 

     if(this.form) { 
     this.form.submit(); 
     } 

     this.disabled = true; 

     if(this.tagName === 'BUTTON') { 
     this.innerHTML = disableText; 
     } else if(this.tagName === 'INPUT') { 
     this.value = disableText; 
     } 
    }); 
    }); 

})(document, jQuery); 

Он может быть использован в HTML так:

<button disable-on-click data-disable-text="Saving...">Click Me</button> 
<button class="disable-on-click">Click Me</button> 
<input type="submit" disable-on-click value="Click Me" /> 
5

протестирован на IE11, FF53, GC58:

onclick="var e=this;setTimeout(function(){e.disabled=true;},0);return true;" 
+0

Это работало в отличие от других. Протестировано на GC62. – TREMOR

0

Я думаю, что простой способ кнопку, чтобы отключить это :data => { disable_with: "Saving.." } Это будет отправить форму, а затем сделать оТКЛЮЧИТЬ, также не будет кнопка отключения я f у вас есть какие-либо проверки, например required = 'required'.

0

Я сделал трюк. Когда установлен тайм-аут, он отлично работает и отправляет все значения.

$(document).ready(function() { 
     document.getElementById('btnSendMail').onclick = function() { 
      setTimeout(function() { 
       document.getElementById('btnSendMail').value = 'Sending…'; 
       document.getElementById('btnSendMail').disabled = true; 
      }, 850); 
     } 
    }); 
Смежные вопросы