OnClick - запретить пользователю несколько отправок

Возможный дубликат:
как чтобы предотвратить отправку нескольких форм со стороны клиента?

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

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

Это код, который у меня есть в файле PHP:

<input type="submit"  class="button" value="<?php echo $AppUI->_('update task'); ?>" onclick="updateTask();" />

фактически я просто хочу, чтобы пользователь нажал кнопку и после одного щелчка. Он либо неактивен, либо пользователь больше не может нажимать.

Спасибо


person Arthor    schedule 26.10.2012    source источник


Ответы (2)


Просто отключите кнопку в функции updateTask():

document.getElementById("mysubmit").disabled = true; 

Это предполагает, что вы добавляете идентификатор к своей кнопке отправки.

Если это отправка AJAX, убедитесь, что вы снова активируете кнопку, если отправка не удалась.

person Michal Klouda    schedule 26.10.2012
comment
Спасибо :), Если бы я хотел сделать всплывающее окно... например, подождите.. Это намного сложнее??? - person Arthor; 26.10.2012
comment
Нет, это довольно просто. Особенно, если вы используете blockUI (вам даже не нужно отключать затем см. эти демонстрации) - person Michal Klouda; 26.10.2012

Почему бы просто не отключить кнопку в вашем скрипте updateTask()?

document.getElementByID("myButton").disabled='disabled'

Если функция updateTask слишком общая, то ваша кнопка может вызвать более конкретную функцию, которая работает только с этой кнопкой:

function myButtonClicked() {
    document.getElementByID("myButton").disabled='disabled';
    updateTask();
}

а затем измените свою кнопку, чтобы она вызывала myButtonClicked вместо updateTask.

<input type="submit" ... onclick="myButtonClicked();" />
person Sam Fen    schedule 26.10.2012
comment
Ванильная версия JS (вопрос не был помечен jQuery): document.getElementById("myButton").disabled = 'disabled'; - person jrajav; 26.10.2012
comment
Да, извините, я добавлял это, пока вы комментировали, я думаю! - person Sam Fen; 26.10.2012
comment
да, хорошо, но могу ли я не редактировать его в приведенном коде? - person Arthor; 26.10.2012
comment
Это код, который я нашел, который просит вас что-то добавить, если вы не написали в поле для комментариев <script language="javascript" type="text/javascript"> function updateTask() { var f = document.editFrm; if (f.task_log_description.value.length < 1) { alert( '<?php echo $AppUI->_('tasksComment', UI_OUTPUT_JS); ?>' ); f.task_log_description.focus(); return; } <?php Могу ли я добавить код сюда? Спасибо - person Arthor; 26.10.2012
comment
Да, вы бы добавили код в функцию updateTask: function updateTask() { document.getElementByID(myButton).disabled='disabled'; var f = ..... Я бы начал с этого. Если вы обнаружите, что вам нужно снова включить кнопку позже, это может стать немного сложнее. - person Sam Fen; 26.10.2012
comment
В ответ на ваш другой вопрос выше, да, вы можете добавить строку document.getElementByID(myButton).disabled='disabled'; перед updateTask() в свойстве onClick кнопки, но я бы сказал, что это плохая практика - помещать в onClick больше логики JS, помимо простого вызова функции. Это значительно усложнит отслеживание, отладку и изменение кода в будущем. Я бы отредактировал саму функцию JavaScript (как вы, кажется, предлагаете в своем последующем комментарии). - person Sam Fen; 26.10.2012