Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Запретить вызов функции более 1 раза в секунду (https://javascript.ru/forum/misc/26953-zapretit-vyzov-funkcii-bolee-1-raza-v-sekundu.html)

asdasd 29.03.2012 00:24

Запретить вызов функции более 1 раза в секунду
 
Как в Javascript запретить вызов функции более 1 раза в секунду...

9xakep 29.03.2012 08:37

setInterval(function () { 
// код ф-ии...
},1000)

asdasd 29.03.2012 10:16

Пробую вот так..не работает..

<input type='submit' onClick="setInterval(alert('прошла 3 сек'),3000)" />

Rootpassword 29.03.2012 10:47

Любая функция в js-это фактически объект, т.е. допускает присваивание свойствам. Просто функции присваивайте, когда ее запускали, и сравнивайте внутри - если слишком быстро, выходим сразу.
Пример
function aaa(){
if(arguments.callee.last_run){
alert('My last run='+arguments.callee.last_run);
}else{
alert('First run');
}
arguments.callee.last_run=new Date();

return true;
}
aaa();
setInterval(aaa,10000);

9xakep 29.03.2012 11:17

бр....
что это? Зачем?
<script>
setInterval(function () {
alert('прошло 3 секунды')
},3000)
</script>

Rootpassword 29.03.2012 11:39

И где тут запрет вызова??????
Я так понял, человек хочет, что бы слишком быстро не кликали на input

Pavel M. 29.03.2012 12:27

в библиотеках бывают подобные методы,
например в undersore
http://documentcloud.github.com/underscore/#throttle

<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
<script>  
	function x() {
	  console.log(1);
	}
	var y = _.throttle(x, 1000); // x будет вызываться не чаще одного раза в секунду
	setInterval(y, 100); // вызываем y десять раз в секунду
</script>

9xakep 29.03.2012 12:59

Так ТС не описал тему, я думал у ему задержку надо сделать..

рони 29.03.2012 13:15

asdasd,
Вариант...для наглядности время запрета увеличено до 10 сек.
<!DOCTYPE html>
<html >
<head>
  <title></title>
</head>
<body>
<script type="text/javascript">
var stop;
function foo()  //ваша функция
{
  alert(1)
}

function go(foo) {
    stop || (stop = !0, window.setTimeout("stop=!1", 10E3),foo());
};
</script>
<input type="button" name="" value="go" onclick="go(foo)" />
</body>
</html>

asdasd 29.03.2012 13:58

всем спасибо!! сделал)


Часовой пояс GMT +3, время: 14:29.