![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
01.12.2016, 04:41
|
Новичок на форуме
|
|
Регистрация: 01.12.2016
Сообщений: 7
|
|
убрать при клике в другом месте
всем доброго времени суток
выручайте, начал изучать js и столкнулся с проблемой, не могу реализовать такую фишку
есть блок который по умолчанию не виден, при клике скажем на ссылку этот блок появляется, но и закрывается он тоже по клику на данную ссылку. Как организовать так чтобы он закрывался не только по клику на ссылку но и по любой другой области КРОМЕ самого блока и его дочерних элементов???
а тут все имеющиеся коды http://codepen.io/v-green/pen/LbOvKM
PS если можно еще и комментарии добавьте пожалуйста
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
01.12.2016, 09:24
|
![Аватар для ksa](https://javascript.ru/forum/image.php?u=8616&dateline=1282216923) |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,232
|
|
Сообщение от VGreen
|
Как организовать так чтобы он закрывался не только по клику на ссылку но и по любой другой области КРОМЕ самого блока и его дочерних элементов?
|
Цитата:
|
обычно все это делают так
function openPopup(e)
{
//показываем попап
}
function closePopup (e)
{
// скрываем поп-ап
$('body').off('click', closePopup);
}
$('button').on(
'click',
function (e)
{
e.preventDefault();
openPopup(e);
setTimeout(
function ()
{
$('body').on('click', closePopup)
}
);
return false;
}
);
setTimeout в данном случае приводит все реализации "всплытия" событий к единообразию. Он откладывает выполнение привязки закрытия события на время, когда событие закончится.
|
Взято тут...
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
01.12.2016, 11:24
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
ksa,
А если дивов и кнопок несколько, как в примере ТС?
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
01.12.2016, 11:36
|
![Аватар для ksa](https://javascript.ru/forum/image.php?u=8616&dateline=1282216923) |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,232
|
|
Сообщение от Dilettante_Pro
|
А если дивов и кнопок несколько
|
Их не давят одновременно...
Всплывающие ДИВы можно свести к одному, заполняя его разным контентом...
Зная дочерний элемент, всегда можно проверить "нет ли родителя с определенным классом или еще чем-то"...
Т.о. используя, описанный выше, подход можно решить данную проблему.
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
01.12.2016, 12:32
|
Новичок на форуме
|
|
Регистрация: 01.12.2016
Сообщений: 7
|
|
ksa, это конечно хорошо, но немного не то, поскольку дивов много, а скрипт надо один, да и использоваться он будет не как поп-ап окно, а нечто вроде подсказки но с возможностью донести до пользователя информацию, например сделать мини-профиль, форму входа, форму поиска, блок сортировки файлов и тд и тп
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
01.12.2016, 13:20
|
![Аватар для ksa](https://javascript.ru/forum/image.php?u=8616&dateline=1282216923) |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,232
|
|
Сообщение от VGreen
|
использоваться он будет не как поп-ап окно, а нечто вроде подсказки
|
Те же груши, только боком...
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
01.12.2016, 13:22
|
![Аватар для ksa](https://javascript.ru/forum/image.php?u=8616&dateline=1282216923) |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,232
|
|
VGreen, если не понимаешь принцип "закрывания вне элемента" - просто сделай кнопочку "Х" в правом верхнем углу твоей "подсказки".
Нажимая на ту кнопочку элемент будет исчезать... ![](https://javascript.ru/forum/images/smilies/wink.gif)
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
01.12.2016, 13:45
|
Новичок на форуме
|
|
Регистрация: 01.12.2016
Сообщений: 7
|
|
это уже велосипед, кликай ссылку она и закроет. А так да, я не понимаю принцип закрытия вне элемента, потому и написал с просьбой помочь ![Sad](https://javascript.ru/forum/images/smilies/sad.gif)
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
01.12.2016, 14:22
|
![Аватар для ksa](https://javascript.ru/forum/image.php?u=8616&dateline=1282216923) |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,232
|
|
Как вариант...
<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
-->
<style type='text/css'>
div {
display: none;
border: 1px solid;
}
.on {
display: block;
}
a {
display: block;
margin-top: 20px;
}
a:first-child {
margin-top: auto;
}
</style>
<script type='text/javascript'>
$(function(){
$('a').click(function(){
$(this).next().addClass('on');
setTimeout(function(){
$(document).on('click', closePopup);
},500);
});
function closePopup (){
$('.on').removeClass('on')
$(document).off('click', closePopup);
}
});
</script>
</head>
<body>
<a href="#">Открыть</a>
<div id="box1">Наш блок 1</div>
<a href="#">Открыть</a>
<div id="box2">Наш блок 2</div>
<a href="#">Открыть</a>
<div id="box3">Наш блок 3</div>
<a href="#">Открыть</a>
<div id="box4">Наш блок 4</div>
<a href="#">Открыть</a>
<div id="box5">Наш блок 5</div>
</body>
</html>
|
|
![Старый](/forum/images/ca_serenity/statusicon/post_old.gif)
01.12.2016, 14:36
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
ksa,
Все замечательно, за исключением одного момента:
Сообщение от VGreen
|
по любой другой области КРОМЕ самого блока и его дочерних элементов???
|
|
|
|
|