Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.09.2013, 17:05
Аспирант
Отправить личное сообщение для Esigns Посмотреть профиль Найти все сообщения от Esigns
 
Регистрация: 27.09.2012
Сообщений: 62

Определение куда пошел клик при событии на body
Привет.
По клику на кнопку возле нее появляется маленькое окошко.
Как сделать так, чтобы по клику на любую часть на сайте(кроме окна) пряталось окно?
Может как-то повесить событие на body и ловить клик?
Реализация желательно на jquery, если это возможно.
Спасибо.

Последний раз редактировалось Esigns, 16.09.2013 в 17:07.
Ответить с цитированием
  #2 (permalink)  
Старый 16.09.2013, 17:15
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

обычно при появлении такого окошка клик вешается на документ, и в функции проверяется event.target и его паренты, если один из парентов - окно, то не будем его скрывать.
другой вариант - повесить клик ещё и на окно, в нем сделать stopPropagation(), чтобы до документа событие не дошло, а в обработчике клика документа просто скрывать окно.

ну и при скрытии окна обработчик с документа убирается.
Ответить с цитированием
  #3 (permalink)  
Старый 16.09.2013, 17:18
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Примерно так:

$(document).on('click', function(e) {
   if(e.target.className != 'класс окошка') {
      //...
   }
});
Ответить с цитированием
  #4 (permalink)  
Старый 16.09.2013, 17:19
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от Ruslan_xDD
if(e.target.className != 'класс окошка')
target может быть дочерним элементом окошка
Ответить с цитированием
  #5 (permalink)  
Старый 16.09.2013, 17:21
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Яростный Меч, это да.

Есть ещё такая идея:

$('body *').click(function() {
   if(!$(this).parents('класс окошка').length) {
      //...
   }
});


Но лучше так делать не стоит, так как при клике на любой элемент будет срабатывать этот код.

Последний раз редактировалось ruslan_mart, 16.09.2013 в 17:26.
Ответить с цитированием
  #6 (permalink)  
Старый 16.09.2013, 17:26
Аспирант
Отправить личное сообщение для Esigns Посмотреть профиль Найти все сообщения от Esigns
 
Регистрация: 27.09.2012
Сообщений: 62

О, спасибо большое!
Ответить с цитированием
  #7 (permalink)  
Старый 16.09.2013, 17:35
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Самый нормальный вариант:

.display {
   display: none;
   height: 100%;
   left: 0%;
   top: 0%;
   position: fixed;
   width: 100%;
   z-index: 1;
}


<div class="display"></div>


var display;

$(function() {
   display = $('.display');
   display.click(function() {
      this.style.display = 'none';
   });
});

function winOpen() {
   /*Тут код для открытия окна*/
   display.css('display', 'block');
}

function winClose() {
   /*Тут код для закрытия окна*/
   display.css('display', 'none');
}
Ответить с цитированием
  #8 (permalink)  
Старый 16.09.2013, 18:30
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Ruslan_xDD
Но лучше так делать не стоит, так как при клике на любой элемент будет срабатывать этот код.
Дык что мешает навешивать обработчик только при открытии окна и затем снимать его? И про делегирование обработки событий не слышал? Поди почитай.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При установке CSS для Body "overflow: hidden" съезжает верстка, в чем дело? Slevin Kelevra Общие вопросы Javascript 18 08.07.2012 20:27
стили input при событии onFocus SerjRamone Элементы интерфейса 11 08.07.2010 15:58
Координаты body относительно окна при margin auto varanio Events/DOM/Window 2 19.02.2010 10:28
Смена картинки (бекграунд дива ) при событии (нажатие клавиш или клавиши и мыши) Monster Events/DOM/Window 5 01.11.2009 01:16
Определение координат body. Kolyaj Events/DOM/Window 10 04.04.2009 16:20