Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.06.2010, 03:13
Аспирант
Отправить личное сообщение для Urfin Посмотреть профиль Найти все сообщения от Urfin
 
Регистрация: 22.07.2009
Сообщений: 85

Закрыть окно
Здравствуйте!
Подскажите пожалуйста как закрыть попап див, кликнув вне его.
Соответственно, если кликаем по нему самому, он закрываться не должен.
Я пытался так, но как отфильтровать клик по самому диву не понятно:
$(document).click(function(){
	$('#popup').fadeOut();	
})
Ответить с цитированием
  #2 (permalink)  
Старый 26.06.2010, 03:43
Аватар для sysya
Профессор
Отправить личное сообщение для sysya Посмотреть профиль Найти все сообщения от sysya
 
Регистрация: 27.12.2009
Сообщений: 292

Такой вариантик если попробовать

if ($(this).attr('id') != 'popup') { $(this).fadeOut(); }
__________________
Нет предела совершенству...
Ответить с цитированием
  #3 (permalink)  
Старый 26.06.2010, 07:24
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

$(document).click(function(e){
var e = e || window.event, x = e.srcElement || e.target;
if (x != document.getElementById('popup')) $('#popup').fadeOut();
})
Ответить с цитированием
  #4 (permalink)  
Старый 27.06.2010, 02:28
Аспирант
Отправить личное сообщение для Urfin Посмотреть профиль Найти все сообщения от Urfin
 
Регистрация: 22.07.2009
Сообщений: 85

exec, спасибо, Ваш вариант работает, но только если всплывающий див пуст. А если он содержит еще элементы и я кликаю по внутреннему содержимому, он все равно закрывается. А хотелось бы, чтобы не закрывался.
Ответить с цитированием
  #5 (permalink)  
Старый 27.06.2010, 04:30
Аспирант
Отправить личное сообщение для Urfin Посмотреть профиль Найти все сообщения от Urfin
 
Регистрация: 22.07.2009
Сообщений: 85

Решил задачу следующим образом:
(Если у кого то есть более изящное решение, буду рад посмотреть!)
$(document).click(function(e){
	var e = e || window.event, x = e.srcElement || e.target;
	var arP = new Array();
	var p = $(x).parents();
	for(var i=0; i<p.length; i++){
		arP[i]=$(p[i]).attr('id');
	}
	arP[p.length]=$(x).attr('id');
	if (!inArray(arP, 'popup'))$('#popup').fadeOut();
});

function inArray(mas, element)
{
	for (var i = 0; i < mas.length; i++)
	{
	  if (mas[i] == element)
	  {
		return true;
	  }
	}
	return false;
}
Ответить с цитированием
  #6 (permalink)  
Старый 27.06.2010, 09:04
Аватар для sysya
Профессор
Отправить личное сообщение для sysya Посмотреть профиль Найти все сообщения от sysya
 
Регистрация: 27.12.2009
Сообщений: 292

Может проверять елемент является ли он "popup" и спрашивать, нет ли у него родителя с id="popup"
__________________
Нет предела совершенству...
Ответить с цитированием
  #7 (permalink)  
Старый 27.06.2010, 09:08
Профессор
Отправить личное сообщение для exec Посмотреть профиль Найти все сообщения от exec
 
Регистрация: 21.01.2010
Сообщений: 1,022

Можно попробовать так:

$(document).click(function(e){
var e = e || window.event, x = e.srcElement || e.target;
if (x != document.getElementById('popup') || !$(x).parents('#popup').size()) $('#popup').fadeOut();
});
Ответить с цитированием
  #8 (permalink)  
Старый 27.06.2010, 16:47
Аспирант
Отправить личное сообщение для Urfin Посмотреть профиль Найти все сообщения от Urfin
 
Регистрация: 22.07.2009
Сообщений: 85

Сообщение от exec Посмотреть сообщение
Можно попробовать так:

$(document).click(function(e){
var e = e || window.event, x = e.srcElement || e.target;
if (x != document.getElementById('popup') || !$(x).parents('#popup').size()) $('#popup').fadeOut();
});
Да, действительно, более просто и изящно. Только нужно оператор "&&", а не "||".
if (x != document.getElementById('popup') && !$(x).parents('#popup').size()) $('#popup').fadeOut();
Ответить с цитированием
  #9 (permalink)  
Старый 27.06.2010, 20:52
Интересующийся
Отправить личное сообщение для evguenyk Посмотреть профиль Найти все сообщения от evguenyk
 
Регистрация: 06.06.2010
Сообщений: 11

Я решал задачу по другому.
При попапе дива - делал еще один блок с шириной и высотой 100%. на этот фоновый блок вешал событие, которое скрывает попап...

P.S. я сторонник идеи, чем меньше изворотов - тем стабильнее работает... наверное, вышеизложенные варианты красивее
Ответить с цитированием
  #10 (permalink)  
Старый 17.05.2011, 23:41
Кандидат Javascript-наук
Отправить личное сообщение для TicTac Посмотреть профиль Найти все сообщения от TicTac
 
Регистрация: 07.09.2010
Сообщений: 133

А как работает такая запись кода?

var e = e || window.event, x = e.srcElement || e.target;

как это элементы сравниваются через или а потом еще присваиваются?

Последний раз редактировалось TicTac, 17.05.2011 в 23:44.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как закрыть динамичное окно вместе\после родительского? Vilmos Элементы интерфейса 1 16.07.2009 20:54
Новое окно с рисунком Vilmos Элементы интерфейса 2 24.06.2009 23:59
Как закрыть окно и вернуться на html-метку предыдущего? Kokaln Events/DOM/Window 6 21.04.2009 04:12
Как узнать свернуто окно браузера или нет. bar-boss Events/DOM/Window 3 25.09.2008 16:09
как при открытии окна закрыть предыдущее Евдокимова Events/DOM/Window 3 16.09.2008 17:12