Предотвращение выполнения функции ещё раз.
Всем привет!
В общем задача такая: кликаю на объект, начинает выполняться функция. Как сделать, что бы если я кликну ещё раз на объек(во время выполнения функции), то функция не начинала выполняться опять. |
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, время: 09:33. |