Показать сообщение отдельно
  #1 (permalink)  
Старый 24.03.2015, 13:43
Кандидат Javascript-наук
Отправить личное сообщение для vuler Посмотреть профиль Найти все сообщения от vuler
 
Регистрация: 16.02.2012
Сообщений: 109

Обработчик срабатывает сразу же после установки
Хочу еще раз вернуться к вопросу установки обработчика событий внутри функции.
Функция show_edite_sub_menu вызывается при правом клике по элементу.
Она добавляет контекстное меню, которое будет скрываться при клике в любой области отличной от контекстного меню(обработчик $('body').on('mousedown.poper',function....). Проблема в том, что установку этого обработчика приходится обертывать в setTimeout, иначе получается, что контекстное меню создается и сразу же скрывается, т.к. обработчик $('body').on('mousedown.poper' устанавливается и сразу же запускается. Можно как-то изменить код, чтобы не пользоваться таймаутом или это невозможно?

show_edite_sub_menu:function(e){
		if(e.which!=3) return;
		elem=$(e.currentTarget);
		shape=this.sh_context_menu.clone();
		var offset = elem.offset();
		var relativeX = (e.pageX - offset.left);
		var relativeY = (e.pageY - offset.top);
		shape.css({left:relativeX,right:relativeY});
		
		setTimeout(function(){
		$('body').on('mousedown.poper',function(e){
			console.log('dele');
			//Код скрытия
			$('body').off('mousedown.poper');
		})},1);
		elem.prepend(shape);
	},
Ответить с цитированием