Перейти к содержимому



Деактивация кнопки на определенное время

#1

Поделиться сообщением #1



Дилетант

Дилетант
  • Неактивные
  • 53 сообщений
  • Репутация: 0
0

Отправлено 02 Декабрь 2012 - 17:14

Здравствуйте, уважаемые специалисты.

Ест такая вот кнопка

<button id=reload style="float:right;" type=button onClick="this.form.code.value=''; showContent('/forum/vote.php'); ">Обновить картинку</button>

Которая выполняет фнкцию на php и очищает значение поля code.

Вопрос: как мне сделать так, чтобы при нажатии на эту кнопку она была бы НЕАКТИВНОЙ несколько секунд?

Пробовал впихнуть в onclick функцию setTimeout(document.getElementById('reload').disabled='true',10000);

становится неактивной, но обратно не возвращается.

Заранее благодарю за помощь.

 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Отключение кнопки формы
  2. Кнопка обновления
  3. Управление активностью (enable) кнопки (submit)
  4. Как сделать так, чтобы диалог печати открывался сразу же при нажатии кнопки "печать"
  5. Кнопка "Далее" для продолжения статьи

#2

Поделиться сообщением #2



isvetlichniy

isvetlichniy
  • Пользователь
  • 622 сообщений
  • Репутация: 93

Отправлено 02 Декабрь 2012 - 17:48

setTimeout(document.getElementById('reload').disabled='true',10000);
это дективирует кнопку.

А после используйте
document.getElementById('reload').disabled='false';

Тоесть нужно выключить ,а потом включить кнопку
Это самый простой способ решения, основанный на ваших же попытках
в итоге получится код что то вроде
<button id=reload style="float:right;" type=button onClick="this.form.code.value=''; showContent('/forum/vote.php'); setTimeout(document.getElementById('reload').disabled='true',10000);document.getElementById('reload').disabled='false';">Обновить картинку</button>

а зачем вы используете экранирования обратным слэшем?
  • 1

#3

Поделиться сообщением #3



Дилетант

Дилетант
    Topic Starter
  • Неактивные
  • 53 сообщений
  • Репутация: 0

Отправлено 03 Декабрь 2012 - 13:53

а зачем вы используете экранирования обратным слэшем?

Потому что у меня вот такая штука:

$sid = md5(rand());
return '<input style="float:left;" name="code" size="10" maxlength="8" type="text"> <div style="float:left;" id="contentBody"><input name="sid_ddos" value="'.$sid.'" type="hidden"><img src="agent.php?a=code&amp;sid='.$sid.'" alt="'.MSG_user_nocode.'"></div>  <button id="reload" style="float:right;" type="button" onclick="this.form.code.value=''; showContent('/forum/vote.php'); document.getElementById('reload').disabled=true; setTimeout(document.getElementById('reload').disabled=false,1000); ">Обновить картинку</button><div id="loading" style="display: none"></div> ';

Пока что-то не получается вернуть disabled=true в disabled=false через определённое время.

Смысл такой, чтобы пользователь не нажимал часто на Обновить Картинку. А картинка эта - картинка Капчи.
  • 0

#4

Поделиться сообщением #4



isvetlichniy

isvetlichniy
  • Пользователь
  • 622 сообщений
  • Репутация: 93

Отправлено 03 Декабрь 2012 - 18:05

ну включайте вы голову пожалуйста!

что это такое? никакой формы у вас нет
this.form.code.value='';
а код есть....

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


<?php
$sid = md5(rand());
return '<input style="float:left;" name="code" id="code" size="10" maxlength="8" type="text">
<div style="float:left;" id="contentBody"><input name="sid_ddos" value="'.$sid.'" type="hidden">
<img src="agent.php?a=code&amp;sid='.$sid.'" alt="'.MSG_user_nocode.'"></div>
<button id="reload" style="float:right;" type="button"
onclick="updateCaptcha();">
Reload image</button><div id="loading" style="display: none"></div> ';
?>
<script>
function updateCaptcha(){
document.getElementById('code').value='';
showContent('/forum/vote.php');
document.getElementById('reload').disabled=true;
setTimeout('document.getElementById("reload").disabled=false',1000);
}
</script>

  • 0

#5

Поделиться сообщением #5



Дилетант

Дилетант
    Topic Starter
  • Неактивные
  • 53 сообщений
  • Репутация: 0

Отправлено 03 Декабрь 2012 - 18:11

Благодарю. Буду пробовать. Форма есть, просто я привел часть кода, который капчу выводит.
Пока попробую на простом примере. Без этих сложных и длинных onclick
  • 0

#6

Поделиться сообщением #6



isvetlichniy

isvetlichniy
  • Пользователь
  • 622 сообщений
  • Репутация: 93

Отправлено 03 Декабрь 2012 - 18:16

никогда не используйте вот таких конструкций
this.form.code.value=''

используйте доступ к элементам по айди
document.getElementById('code').value='';

  • 0

#7

Поделиться сообщением #7



Дилетант

Дилетант
    Topic Starter
  • Неактивные
  • 53 сообщений
  • Репутация: 0

Отправлено 03 Декабрь 2012 - 18:18

Понял. Это с точки зрения уязвимости неправильно?


  • 0

#8

Поделиться сообщением #8



isvetlichniy

isvetlichniy
  • Пользователь
  • 622 сообщений
  • Репутация: 93

Отправлено 03 Декабрь 2012 - 18:20

это будет работать только в случае если на сервера включена опция "register_globals=on"
но на 99% серверов эта опция отключена с точки зрения безопасности
  • 0

#9

Поделиться сообщением #9



Дилетант

Дилетант
    Topic Starter
  • Неактивные
  • 53 сообщений
  • Репутация: 0

Отправлено 03 Декабрь 2012 - 18:25

У меня register_globals=off но конструкция работает, поле code очищается. НО ... всё-равно перешел на правильный код.
  • 0

#10

Поделиться сообщением #10



yury

yury
  • Пользователь
  • 632 сообщений
  • Репутация: 181

Отправлено 03 Декабрь 2012 - 18:43

это будет работать только в случае если на сервера включена опция "register_globals=on" но на 99% серверов эта опция отключена с точки зрения безопасности

Причем тут сервер?
Речь ведь о JS, который выполняется исключительно на клиентской машине и про настройки интерпретатора PHP, живущего на сервере, никогда не узнает.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru