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

Реферальная программа Мегаплана

Партнерская программа Kredov

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

#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

#2 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 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 Дилетант

Дилетант
    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 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 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 Дилетант

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

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

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

#6 isvetlichniy

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

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

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

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

  • 0

#7 Дилетант

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

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

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


  • 0

#8 isvetlichniy

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

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

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

#9 Дилетант

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

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

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

#10 yury

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

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

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

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

robot

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


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