Предотвращение выполнения функции ещё раз.
Всем привет!
В общем задача такая: кликаю на объект, начинает выполняться функция. Как сделать, что бы если я кликну ещё раз на объек(во время выполнения функции), то функция не начинала выполняться опять. |
xTODx,
начали - проверили флаг -- ок -- запустились - поставили флаг в не ок -- отработали снова флаг в ок |
1.
function test() {
if(arguments.callee.clicked) return;
arguments.callee.clicked = true;
//code...
}
2.
var flag;
function test() {
if(flag) return;
flag = true;
//code...
}
Ну а когда нужно, то просто менять значение на false, чтобы ф-цию можно было снова запустить. |
Цитата:
- при клике удалить обработчик с элемента - поокончании действа опять "навесить" обработчик |
в общем поковырял, сделал так
function openclose(spd, obj){
if(flag==0){
flag = 1;
img = $(obj).parent().find('#img');
src = $(img).attr('src');
obj = $(obj).parent().find('#effect');
obj.toggleClass( "newClass", spd );
if(src == '/img/minus.gif'){
$(img).attr("src",'/img/plus.gif');
}else{
$(img).attr("src",'/img/minus.gif');
}
setTimeout(function(){ flag = 0;},spd+400);
}
}
Уверен, можно сделать рациональней, но как? та и тут в чём то ошибочка(всё-равно если кликать во время смены класса, то опять поймаем ту же проблему, функция выполниться) |
тоже задумался об этом, но будет ли это рационально?
|
function openclose(spd, obj){
if(flag==1) return;
flag=1
//Наши действия
setTimeout(function(){ flag = 0;},spd+400);
}
|
Зависит от конкретного случая. Флага обычно достаточно.
Однако его лучше всё-же привязать к функции дабы не засорять зря.
function openclose(){
if(openclose.running) return;
openclose.running= true;
// code
openclose.running= false;
}
|
cпасибо, сейчас)
|
попробовал. и не пойму, то ли сани не едут то ли я...)) но скорее всего второй вариант. в общем не работает:help:
|
| Часовой пояс GMT +3, время: 20:36. |