Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скрыть слой при щелчке не на нём (ещё раз)
 
 автор: desh   (16.11.2010 в 00:06)   письмо автору
 
 

Здравствуйте,

Так уж получилось, что спустя год после создания прошлой однотипной темы столкнулся с новой проблемой из того же разряда. И решить её элегантно и по-простому не получается. Начну по-порядку.

Необходимо, чтобы слой скрывался при щелчке не на нём.

Предыдущая моя тема по проблеме:
http://softtime.ru/forum/read.php?id_forum=4&id_theme=67068&page=1

Просто всё работает хорошо и прекрасно. Простое и удобно. Если щелчок произведён по слою, то он не скрывается, а если за его пределами, то скрывается.

Но так получается, что в новом проекте, который я сейчас делаю, слой, который надо скрывать содержит внутри себя ещё слои и др. элементы (<form>, <span> и т.д.). И если произвести щелчок по слою, то он скрывается. Выяснил, что это происходит в связи с тем, что дочерние элементы имеют отличные ID от того блока, который мы проверяем (что само собой естественно), поэтому при сравнении e.id != 'ид_слоя' (см. тему выше) получается true и выполняется условие, скрывающее слой.

Я так понимаю, что условие на скрытие нужно производить таким образом, что при каждом щелчке проверять, а не был ли произведён щелчок на нужном слое или на одном из его дочерних элементов? Звучит понятно и просто, но реализовать не получается :( Или есть более простое решение?

К сожалению сразу говорю, что каждому дочернему элементу свой ID присвоить не представляется возможным. Дочерних элементов может быть очень много.


Надеюсь, что я смог понятно объяснить ситуацию, потому что голова сейчас забита поиском решения и поток мыслей очень сбивчивый. Любые вопросы по теме задавайте - отвечу.

Заранее большое спасибо, сам уже парюсь над простым вариантом решения (а он наверняка есть!), осталась надежда лишь на Вас. Поиск результатов не дал :(

  Ответить  
 
 автор: АЯ   (16.11.2010 в 02:13)   письмо автору
 
   для: desh   (16.11.2010 в 00:06)
 

Крутите циклом родителей вплоть до <BODY> и на каждом шаге проверяете id
function (e)
{
var e = e || window.event, src = e.srcElement || e.target, FLAG = 0;
while (src != document.body)
   {
   if (src.id == 'id_слоя') {FLAG = 1; break}
   src = src.parentNode;
   }
if (FLAG) //кликнули по слою
else //кликнули вне слоя

  Ответить  
 
 автор: Desh   (16.11.2010 в 18:45)   письмо автору
 
   для: АЯ   (16.11.2010 в 02:13)
 

Большое спасибо за ответ, сейчас попробую применить.
Такой вопрос: нагружать такая процедура ПК пользователя не сильно будет? При каждом щелчке проверять всё это?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования