Добрый день.
Решил немного упростить код, скрывания объектов, но тут появилась небольшая загвоздка.
Вот код.
$('.js_show_sferi').on('click',sferi_change_visible);
function sferi_change_visible(e){
sferi_block=$(this).parent().find('.sferi_block_wrap').children();
sferi_block.stop();
if (sferi_block.is(':visible'))
sferi_block.fadeOut(1000);
else {
//e.preventDefault();
sferi_block.fadeIn(1000);
sferi_block.hide_by_click();
}
}
jQuery.fn.hide_by_click=function(){
array_list=$('body').data('hide_by_click_list');
if (!full_null(array_list)){
array_list.push($(this));
}else{
array_list=[$(this)];
}
$('body').data('hide_by_click_list',array_list);
//setTimeout(function(){
$('body').on('click',function (event){
//if (event.isDefaultPrevented()==true) return;
array_list=$('body').data('hide_by_click_list');
array_list[0].remove();
})
//},300);
}
Тут для теста.Объект не стирается, а удаляется. Проблема в том, что объект появляется и одновременно удаляется. Т.е.
$('.js_show_sferi').on('click',sferi_change_visibl e) срабатывает и за ним сразу задается обработчик и запускается $('body').on('click',function (event). Т.е. объект появляется и удаляется одновременно.
Нашел 2 варианта решения. -
1) добавить. e.preventDefault(); в основную функцию и event.isDefaultPrevented()во встроеную. Так все работает, но проблема в том, что прописывать e.preventDefault(); приходится прописывать в основной фунции, чего мне бы не хотелось. Нужно чтобы просто в коде можно запускать метод .hide_by_click(); и не заботится больше ни о чем. Встроенная функция jQuery.fn.hide_by_click=function(e) - эвент не обрабатывает, выдает ошибку. Возможно как-нибудь это обойти?
2) Вариант более тупой - через таймаут.