Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
3 / 3 / 1
Регистрация: 22.10.2013
Сообщений: 185
1

Срабатывают две функции при клике (один div сверху другого)

18.11.2017, 20:57. Показов 1318. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
var qwer = 0
$(click_pod_menu).click(function(e){
    qwer = (qwer ==0) ? 1 : 0;
if (qwer == 1)
{
    var e = document.getElementById('click_pod_menu');
    e.className = 'odd';
    e.innerHTML="<span style='color:grey;float:left;margin-left:3px;'>◄</span> <b>Меню</b> <span style='color:grey;float:right;margin-right:3px;'>►</span>";
    var el = document.getElementById('main_pod_menu');
    el.style.display='';
}
if (qwer == 0)
{
    var e = document.getElementById('click_pod_menu');
    e.className = 'even';
    e.innerHTML="<span style='color:grey;'>◄</span> Меню <span style='color:grey;'>►</span>";
    var el = document.getElementById('main_pod_menu');
    el.style.display='none';
}
return false;
});
 
        document.body.addEventListener("click", function(){
            var e = document.getElementById('click_pod_menu');
            e.className = 'even';
            e.innerHTML="<span style='color:grey;'>◄</span> Меню <span style='color:grey;'>►</span>";
            var el = document.getElementById('main_pod_menu');
            el.style.display='none';
            qwer = 0;
        });
Вот такой скриптик есть на открытие и закрытие меню пользователя. Если на него нажать, то оно открывается. Если нажать снова, то закрывается. А так же если нажать на боди, то тоже закрывается.

Всё работает, но хотелось бы, что бы не закрывалось меню, если я в нём тыкаю. А то даже текст выделить невозможно. Сразу считает, что на боди нажал и клозит его. Как это сделать? Не могу сообразить какое должно быть условие?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2017, 20:57
Ответы с готовыми решениями:

ToggleCLASS - прятать один div при клике в область другого
Как сделать так, чтоб если тыкаю в место определённого дива (назовём его главным) убирался другой...

При клике на DIV меняется картинка другого DIV
Подскажите как это реализовать? Добавлено через 21 минуту Можно-ли решить этот вопрос при...

Можно ли задать один блок div относительно другого div-а?
Привет. Пытаюсь сделать слои, по этому примеру. Там они используют абсолютное позиционирование и...

Как переместить один div внутрь другого div для каждого поста на сайте?
На сайте есть посты (div id=&quot;post-XXXX_XXXX&quot;) В каждом из постов есть див например такого вида -...

4
707 / 309 / 191
Регистрация: 05.03.2015
Сообщений: 822
19.11.2017, 02:28 2
Лучший ответ Сообщение было отмечено Зеликов как решение

Решение

Код очень плохой, если честно. Если вкратце, то нужно рекурсивно проверять родителей элемента, на который кликнули, типа такого:

Javascript
1
2
3
4
 document.body.addEventListener("click", function(event){
        if(event.target.closest(".menu") !== null); 
        //если элемент, по которому кликнули не имеет родителя с классом "меню", то скрываем меню
        });
П.С. обратите внимание, если нужна поддержка старых браузеров, но понадобится полифилл (который без проблем гуглится)
1
3 / 3 / 1
Регистрация: 22.10.2013
Сообщений: 185
19.11.2017, 04:59  [ТС] 3
msheal, идею понял, проверять какой таргет на клике. Спасибо
А подскажите пожалуйста.. я не отрицаю, что код плохой) так как с JS не так давно дружу.. подскажите, что тут самое такое прям плохое?) я хоть впредь буду правильнее делать
0
707 / 309 / 191
Регистрация: 05.03.2015
Сообщений: 822
22.11.2017, 01:30 4
Лучший ответ Сообщение было отмечено Зеликов как решение

Решение

0) Для начинающих весьма советую использовать jquery для удобства и компактности/читабельности кода. Это не обязательно, разумеется, но на первых порах очень упрощает разработку.

1) Использовать глобальные переменные - плохая практика. В редких случаях без этого не обойтись, но реально глобальные переменные нужны крайне редко.
2) Мешать html/css в js коде без необходимости - зачастую плохая идея. В вашем случае такой необходимости нет и взаимодействие с домом можно легко свести к добавлению/убиранию класса меню.
3) return false в конце обработчика клика бесполезен и его можно спокойно убрать.
4) var el... внутри первого обработчика объявлен 2 раза ибо область видимости на уровне функций
1
3 / 3 / 1
Регистрация: 22.10.2013
Сообщений: 185
24.11.2017, 00:03  [ТС] 5
msheal, понял. Спасибо большое за высказывание. Буду следить впредь за этим! Спасибо ещё раз
0
24.11.2017, 00:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2017, 00:03
Помогаю со студенческими работами здесь

Как прижать один div к низу другого div?
У меня есть два блока: 1) div1 фоном с помощью php выводится картинка из поста. Высота картинок...

Скрыть <DIV> при клике на динамическом баннере, находящемся в данном <DIV>
Добрый день. Есть &lt;li&gt; , в нем находится динамический баннер . Необходимо, чтобы при клике по...

Показать div поверх другого div при наведении
У меня есть таблица. В каждой ячейке есть div. Так вот надо чтобы при наведении на этот блок,...

Вызов div при клике
Имеется ссылка вида: &lt;a href=&quot;#&quot; id=&quot;l&quot;&gt;Ссылка&lt;/a&gt; При клике нужно вызвать div с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru