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

Да в принципе подправил код. Кому интересно, можно вместе улучшить код.
К любому элементу на страницы применяем метод .hide_by_click(e); и при клике в любою область отличную от этого элемента - он будет скрываться с экрана(нужно для всплывающих окон и меню). Не нравится мне, что в этот метод нужно передавать обязательно event, во внутрь самой функции поместить не удается.
Вот сам код этой функции:
jQuery.fn.hide_by_click=function(e){
	e.preventDefault();
	array_list=$('body').data('hide_by_click_list');
	if (array_list instanceof Array){
		for (key in array_list){
			if (array_list[key]==$(this)) return;
		}
		array_list.push($(this));
	}else{
		array_list=[$(this)];
	}
	$('body').data('hide_by_click_list',array_list);
	$('body').off('click.hide_by_click');
	$('body').on('click.hide_by_click',function (event){
			if (event.isDefaultPrevented()==true) return;
			array_list=$('body').data('hide_by_click_list');
			for (key in array_list){
				array_list[key].stop();
				if(!$(event.target).closest(array_list[key]).length){
					array_list[key].fadeOut();
					array_list.splice(key,1);}
			}
			if (full_null(array_list))
				$('body').off('click.hide_by_click');
			else
				$('body').data('hide_by_click_list',array_list);
			})	
}

Она запоминает все элементы конторые нужно скрыть в переменной 'hide_by_click_list' у элемента body. При клике на любую область, она перебирает все элементы из этого списка и если клик не был по нему - он удаляется. В конце, если список hide_by_click_list пуст, то обработчик удаляется с body.
Также для точности прменяю следующую функцию.
function full_null(elem){//Проверка на полный ноль. отстутсвие или несуществование.
	if (elem=='undefined' || elem==null || elem==""){
		return true;
	}else return false;
}

Разные браузеры по разному видят переменные, если их нет, кто-то undefined, кто-то null, поэтому приходится применять эту конструкцию. Может есть попроще вариант?
Ответить с цитированием