Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.02.2014, 11:20
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

Предотвращение выполнения функции ещё раз.
Всем привет!
В общем задача такая:
кликаю на объект, начинает выполняться функция.
Как сделать, что бы если я кликну ещё раз на объек(во время выполнения функции), то функция не начинала выполняться опять.
Ответить с цитированием
  #2 (permalink)  
Старый 21.02.2014, 11:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

xTODx,
начали - проверили флаг -- ок -- запустились - поставили флаг в не ок -- отработали снова флаг в ок
Ответить с цитированием
  #3 (permalink)  
Старый 21.02.2014, 11:33
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

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, чтобы ф-цию можно было снова запустить.
Ответить с цитированием
  #4 (permalink)  
Старый 21.02.2014, 13:21
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,209

Сообщение от xTODx
кликаю на объект, начинает выполняться функция.
Как сделать, что бы если я кликну ещё раз на объек(во время выполнения функции), то функция не начинала выполняться опять.
Как вариант...
- при клике удалить обработчик с элемента
- поокончании действа опять "навесить" обработчик
Ответить с цитированием
  #5 (permalink)  
Старый 21.02.2014, 13:25
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

в общем поковырял, сделал так
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);
			}
		}

Уверен, можно сделать рациональней, но как?
та и тут в чём то ошибочка(всё-равно если кликать во время смены класса, то опять поймаем ту же проблему, функция выполниться)

Последний раз редактировалось xTODx, 21.02.2014 в 13:36.
Ответить с цитированием
  #6 (permalink)  
Старый 21.02.2014, 13:25
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

тоже задумался об этом, но будет ли это рационально?
Ответить с цитированием
  #7 (permalink)  
Старый 21.02.2014, 13:42
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

function  openclose(spd, obj){
		if(flag==1) return;
                      flag=1
		//Наши действия
		setTimeout(function(){ flag = 0;},spd+400);
		}
Ответить с цитированием
  #8 (permalink)  
Старый 21.02.2014, 13:44
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,583

Зависит от конкретного случая. Флага обычно достаточно.
Однако его лучше всё-же привязать к функции дабы не засорять зря.
function openclose(){
    if(openclose.running) return;
    openclose.running= true;
    // code
    openclose.running= false;
}
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 21.02.2014, 13:50
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

cпасибо, сейчас)
Ответить с цитированием
  #10 (permalink)  
Старый 21.02.2014, 13:52
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

попробовал. и не пойму, то ли сани не едут то ли я...)) но скорее всего второй вариант. в общем не работает
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При клике ссылки, открыть DIV блок, и при клике ещё раз, закрыть его Simon Общие вопросы Javascript 59 28.05.2017 17:31
Добовление формы еще Kuklavod jQuery 2 03.11.2011 15:12
Функция в функции. Обработчики клика. Запутался =) DorianLeroy Общие вопросы Javascript 8 29.09.2011 16:17
Еще раз о перелистывании digital_sword jQuery 14 27.05.2010 22:20
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37