Хочу еще раз вернуться к вопросу установки обработчика событий внутри функции.
Функция 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);
},