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


Пользователь месяца
Андрей WPMasterKZ Андрей WPMasterKZ 1-й за Ноябрь
Очков активности: 888 1 тема, 71 сообщение, 8 баллов репутации
Сайт: wpmaster.kz
ТОП самых активных за этот месяц
  • Фотография OlgaGetman
    #1

    OlgaGetman
    Очков активности: 684 5 тем, 99 сообщений, 4 балла репутации

  • Фотография Mandarin
    #2

    Mandarin
    Очков активности: 552 3 темы, 83 сообщения, 4 балла репутации

  • Фотография TimurR
    #3

    TimurR
    Очков активности: 150 Вне конкурса за определение пользователя месяца

  • Фотография Андрей WPMasterKZ
    #4

    Андрей WPMasterKZ (wpmaster.kz)
    Очков активности: 117 Вне конкурса за определение пользователя месяца

  • Фотография BLIK
    #5

    BLIK
    Очков активности: 102 0 тем, 17 сообщений, 4 балла репутации

  • Фотография Rodiola
    #6

    Rodiola
    Очков активности: 48 1 тема, 13 сообщений, 2 балла репутации

  • Фотография WGN
    #7

    WGN (worldgamenews.com)
    Очков активности: 40.5 Вне конкурса за определение пользователя месяца

  • Фотография pozitron123
    #8

    pozitron123
    Очков активности: 27 2 темы, 12 сообщений, 1 балл репутации

  • Фотография thisismyname
    #9

    thisismyname
    Очков активности: 27 4 темы, 6 сообщений, 1 балл репутации

  • Фотография m3Re
    #10

    m3Re
    Очков активности: 22.5 2 темы, 9 сообщений, 1 балл репутации

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 29.11.2018
  • Яндекс выдача: 11.12.2018
Топ 5 участников по репутации


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

#1 Дилетант

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

Отправлено 02 December 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
  • Неактивные
  • 622 сообщений
  • Репутация: 93

Отправлено 02 December 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 December 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
  • Неактивные
  • 622 сообщений
  • Репутация: 93

Отправлено 03 December 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 December 2012 - 18:11

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

#6 isvetlichniy

isvetlichniy
  • Неактивные
  • 622 сообщений
  • Репутация: 93

Отправлено 03 December 2012 - 18:16

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

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

  • 0

#7 Дилетант

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

Отправлено 03 December 2012 - 18:18

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


  • 0

#8 isvetlichniy

isvetlichniy
  • Неактивные
  • 622 сообщений
  • Репутация: 93

Отправлено 03 December 2012 - 18:20

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

#9 Дилетант

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

Отправлено 03 December 2012 - 18:25

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

#10 yury

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

Отправлено 03 December 2012 - 18:43

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

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

#11 isvetlichniy

isvetlichniy
  • Неактивные
  • 622 сообщений
  • Репутация: 93

Отправлено 03 December 2012 - 18:52

yury, Вы правы. это я уже после тяжелого трудового дня начал глупости писать. как говорится, думал об одном, а написал совсем другое
Но все равно лучше избегать конструкций типа
this.form.code.value=''

а еще лучше использвать вместо javascript фрейморки, например jquery
И пишется все легче на нем. и проще и функционал побольше чем просто у javascript
  • 1

#12 Дилетант

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

Отправлено 03 December 2012 - 19:11

isvetlichniy, всё работает! Когда всё это спагетти в одну функцию запихнул.
Еще раз благодарю за помощь. Ты уж на нас "чайников" и дилетантов не обижайся, что глупые вопросы задаем. ;)

Тему можно закрыть.
  • 0

#13 isvetlichniy

isvetlichniy
  • Неактивные
  • 622 сообщений
  • Репутация: 93

Отправлено 03 December 2012 - 19:24

Да я не обижаюсь. Тока ж чайники должны особзнавать, что помощь должна заключатсья не с том, чтобы тупо исправлять ошибки в кода, а том, чтобы обучить на направить по нужному пути ;)
  • 1

#14 Дилетант

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

Отправлено 03 December 2012 - 19:28

чтобы обучить на направить по нужному пути ;)

Что ты и исправно сделал. Урок твой запомнил. В дальнейшей работе буду использовать. И добрым словом тебя вспоминать. Значит у тебя будет всё хорошо в жизни!
  • 0

#15 Дилетант

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

Отправлено 04 December 2012 - 12:00

Добавь, кому нужно. Вместо кнопки - картинка. При нажатии на нее 10 секунд она становится непрозразной и недоступной.
 

function updateCaptcha(){
showContent('/forum/vote.php');
document.getElementById('reload').disabled=true;
document.getElementById('reload').style.opacity=0.5;
setTimeout('document.getElementById("reload").disabled=false',10000);
setTimeout('document.getElementById("reload").style.opacity=1',10000);
}
<form>
<button onclick="updateCaptcha();" type="button" id=reload style="opacity:1.0; width: 33px; height: 33px; margin: 0; padding:0; border: 0; background: transparent url('reload.png') no-repeat center top; cursor: pointer; cursor: hand; text-indent: -1000em; ">Кнопка</button>
</form>

  • 0

robot

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

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