Обработчик срабатывает сразу же после установки 
		
		
		
		Хочу еще раз вернуться к вопросу установки обработчика событий внутри функции. 
	Функция 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);
	},
 | 
	
		
 vuler, 
	может дело в коде скрытия и без полноценного рабочего макета сложно.  | 
	
		
 Да нет..в нем ничего сложного нет, он особо и не нужен для этого примера. Для теста написал строчку  console.log('dele');. 
	Т.е. при первом нажатии mousedown должно появится контекстное меню, а фраза dele не должна появляться в консоле. А при втором нажатии в любую область, она должна появляться. Исходное событие -"mousedown .tree_line_header": "show_edite_sub_menu", Сейчас собственно так и происходит, только с установленным timeoutom - Хотелось бы без него обойтись.  | 
	
		
 vuler, 
	ок ждите телепата  | 
	
		
 Упростил код, немного покапался в этом вопросе и нашел старанную особенность. 
	Вот код: HTML - ' <div id="page_central"> <div class="test w200 h200"></div> </div>'; 
// $('#page_central').on('mousedown','.test',function(e){
	$('body').on('mousedown','.test',function(e){
		elem=$(e.currentTarget);
		elem.html('НАЖАЛИ НА БЛОК.');
		$('body').on('mousedown',function(e){
			$('body').find('.test').html('НАЖАЛИ В ЛЕВОМ МЕСТЕ')
		})
	})
Если обработчик стоит как $('body').on('mousedown','.test',function(e), то при нажатии на блоке в нем появляется надпись НАЖАЛИ НА БЛОК, а при втором клике в любом месте в нем появится НАЖАЛИ В ЛЕВОМ МЕСТЕ' А вот если обработчик записать так - $('#page_central').on('mousedown','.test',function (e), казалось бы разница не велика, но в результате при первом клике появится НАЖАЛИ В ЛЕВОМ МЕСТЕ, т.е. событие установленное в функции сразу запустится. Это как-то обойти можно?  | 
	
		
 vuler, 
	остановите всплытие  | 
| Часовой пояс GMT +3, время: 14:16. |