Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 0 / 0
Регистрация: 07.07.2020
Сообщений: 44

понять часть кода про раскрывающееся меню

07.10.2020, 18:38. Показов 1248. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!

Я в комментариях в этом коде записала все то, до чего удалось дойти своими силами. Помимо этого есть еще пара вопросов к этому же коду:
  1. Что же такое i? Просто переменная, которая могла быть названа и по-другому или что-то фиксированное, вроде for, toggle?
  2. За счет чего здесь все-таки определяется клик вне раскрывающего контейнера?
  3. Нужно ли в HTML изначально задавать класс show у раскрывающего контейнера? В стилях было сказано написать еще вот это строчку, меня смущает use - не то это приказ "используйте", не то констатация уже имеющегося факта и "используем\используется"
    CSS
    1
    2
    
    /* Show the dropdown menu (use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */
    .show {display:block;}
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
<!-- раскрывающееся меню request -->
 
/* When the user clicks on the button, 
toggle between hiding and showing the dropdown content */
function myFunction2() {
    document.getElementById("myDropdown2").classList.toggle("show");
}
 
// Close the dropdown if the user clicks outside of it
//window.onclick это клик по всему окну в целом?
window.onclick = function(event) {
//если был клик по кнопке .request
  if (!event.target.matches('.request')) {
//получить переменную по классу dropdown-content2 и определить ее для будущего как dropdowns
    var dropdowns = document.getElementsByClassName("dropdown-content2");
//ввести новую переменную
    var i;
//выполнять цикл, пока переменная i не станет больше длины контейнера?
//пока условие верно, то есть пока  i < dropdowns.length, выполнять то, что в фигурных скобках?
    for (i = 0; i < dropdowns.length; i++) {
//ввести новую переменную openDropdown, которая есть заданная выше переменная с содержимым раскрывающегося контейнера, как-то связанная с [i]
      var openDropdown = dropdowns[i];
//если в css у элемента есть класс show, удалить его
      if (openDropdown.classList.contains('show')) {
        openDropdown.classList.remove('show');
      }
    }
  }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.10.2020, 18:38
Ответы с готовыми решениями:

Раскрывающееся меню - при открытии/закрытии вложенного меню закрывается все меню
Проблема во вложенном меню. При открытии/закрытии вложенного меню закрывается все меню. Надо, чтобы главное меню не реагировало на клики во...

Не могу понять часть кода
Задача стоит такая: дан двухмерный массив. Определить номера строк матрицы, в которых знаки элементов чередуются. На скрине либо ниже...

Не могу понять часть кода
int i = 0; M: Console.WriteLine(&quot;i: {0 } &quot;, i); i = i + 1; if (i &lt; 10) goto M; ...

5
249 / 79 / 31
Регистрация: 29.03.2020
Сообщений: 497
07.10.2020, 18:52
Цитата Сообщение от DariaFlo Посмотреть сообщение
За счет чего здесь все-таки определяется клик вне раскрывающего контейнера?
Вот тут и определяется

JavaScript
1
if (!event.target.matches('.request'))
восклицательный знак значит не
1
1 / 0 / 0
Регистрация: 07.07.2020
Сообщений: 44
07.10.2020, 20:00  [ТС]
Цитата Сообщение от transetor Посмотреть сообщение
восклицательный знак значит не
значит эта строка говорит : если клик вне кнопки с этим классом, а что насчет клика вне контейнера?
0
249 / 79 / 31
Регистрация: 29.03.2020
Сообщений: 497
07.10.2020, 20:08
Цитата Сообщение от DariaFlo Посмотреть сообщение
а что насчет клика вне контейнера?
Видимо этого достаточно для определения, больше проверок нет
0
409 / 162 / 32
Регистрация: 26.11.2019
Сообщений: 434
08.10.2020, 01:41
Лучший ответ Сообщение было отмечено DariaFlo как решение

Решение

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//да, window.onclick отслеживает клик в любом месте окна
window.onclick = function(event) {
//если кликнутый элемент не имеет класс .request
  if (!event.target.matches('.request')) {
    //находит коллекцию html-элементов, имеющих класс dropdown-content2
    var dropdowns = document.getElementsByClassName("dropdown-content2");
 
  //  var i; эту переменную лучше определять в самом цикле, это просто счетчик цикла
  // цикл перебирает html-коллекцию
  for (var i = 0; i < dropdowns.length; i++) {
      //var openDropdown = dropdowns[i]; - на мой взгляд это лишняя переменная
      // if (dropdowns[i].classList.contains('show')) { - эта проверка тоже лишняя
         // метод remove() и так проверит есть ли у dropdowns[i] класс show
        dropdowns[i].classList.remove('show');
      // }
    }
  }
}
в общем, похоже на то, что по клику вне какого-то блока с классом .request , элементы с классом dropdown-content2 делаются невидимыми
скорее всего это какой-то выпадающий список должен исчезнуть по клику вне его

Цитата Сообщение от DariaFlo Посмотреть сообщение
- не то это приказ "используйте", не то констатация уже имеющегося факта и "используем\используется"
/* Show the dropdown menu - чтобы показать выпадающее меню
use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */
.show {display:block;}
используется javascript чтобы добавить этот класс к контейнеру .dropdown-content , когда пользователь кликнет по dropdown кнопке

скорее всего контейнер изначально имеет в стилях display:none; , а по клику на кнопке получает класс .show с display:block; т.е. становится видимым. При следующем клике - опять невидимым (класс .show удаляется) , судя по функции
JavaScript
1
2
3
function myFunction2() {
    document.getElementById("myDropdown2").classList.toggle("show");
}
1
1 / 0 / 0
Регистрация: 07.07.2020
Сообщений: 44
08.10.2020, 17:31  [ТС]
Peskova_Sveta, большое спасибо за подробный ответ! Теперь этот код для меня прояснился!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.10.2020, 17:31
Помогаю со студенческими работами здесь

Нужно понять как работает часть кода
Нашел для ознакомления код для формы логина/пароля, читаю код и не могу понять что тут конкретно происходит, объясните пожалуйста ...

Подскажите, как понять эту часть кода Thymeleaf
Добрый день. В google не нашел и давал неверный запрос &lt;li th:class=&quot;${persons.number == (page - 1)} ? 'active...

раскрывающееся меню
У меня есть стандартное меню на jquery с куками, вы можете подсказать как сделать при открытии главного пункта меню переход по ссылки и...

раскрывающееся меню
Доброго времени суток. Необходимо сделать раскрывающееся меню с эффектом. Сверстал меню, которое должно раскрываться по клику на пункт...

Раскрывающееся меню
Здравствуйте. Есть на адаптивной версии сайта http://starvideo.com.ua/ меню. В пунктах меню, таких как на пример &quot;Продакшн...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru