Skip to content

Commit d8bc658

Browse files
committed
[PRAC/cont] Correct "common" dropdown logic
Exclud duplicate actions in log related to open/clos dropdown row-list. Worth noting: - correcting the closeBtnDropdown() function and correcting the listeners on "click" and on "focusout". core: B-3 / JS-BL
1 parent c0cdbf0 commit d8bc658

File tree

1 file changed

+32
-39
lines changed
  • core-courses/3-js-basic-level/practicum-js-basic-level/sb-crm-client/js

1 file changed

+32
-39
lines changed

core-courses/3-js-basic-level/practicum-js-basic-level/sb-crm-client/js/index.js

Lines changed: 32 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1304,24 +1304,16 @@
13041304
isDropdownToggleAllowed = false;
13051305
setTimeout(() => (isDropdownToggleAllowed = true), 200);
13061306

1307-
const nowClickedDropBtn = event.currentTarget; // фиксация нажатой drop-кнопки
1308-
const nowShowedDropList = nowClickedDropBtn.nextElementSibling; // фиксация выпадающего списка (следующего за drop-кнопкой)
1309-
1310-
// проверка на уже открытый выпадающий список (закрытие)
1311-
const alreadyOpenDropBtn = document.querySelector('.drop-open');
1307+
const alreadyOpenDropBtn = document.querySelector('.drop-open'); // фиксация открытого/уже списка (согласно drop-кнопки)
1308+
const nowClickedDropBtn = event.currentTarget; // фиксация нажатой drop-кнопки (сейчас)
13121309

1310+
// закрытие ранее открытого выпадающего списка (если такой был)
13131311
if (alreadyOpenDropBtn && alreadyOpenDropBtn !== nowClickedDropBtn) {
1314-
const alreadyOpenDropList = alreadyOpenDropBtn.nextElementSibling;
1315-
alreadyOpenDropBtn.classList.remove('arrow-rotate', 'drop-open');
1316-
1317-
if (
1318-
alreadyOpenDropList &&
1319-
alreadyOpenDropList.classList.contains('modal-contact-list')
1320-
) {
1321-
alreadyOpenDropList.classList.add('d-none'); // закрытие ранее открытого списка
1322-
}
1312+
closeBtnDropdown();
13231313
}
13241314

1315+
const nowShowedDropList = nowClickedDropBtn.nextElementSibling; // фиксация "ново-открытого" выпадающего списка (согласно drop-кнопки)
1316+
13251317
nowClickedDropBtn.classList.toggle('arrow-rotate'); // переключение направления стрелки
13261318
nowShowedDropList.classList.toggle('d-none'); // переключение видимости текущего списка
13271319

@@ -1406,39 +1398,40 @@
14061398
}
14071399

14081400
function closeBtnDropdown() {
1409-
addModalContactList.classList.add('d-none'); // скрытие выпадающего списка
1410-
addModalContactDropBtn.classList.remove('arrow-rotate'); // возврат направления стрелки
1411-
addModalContactDropBtn.blur(); // снятие фокуса с кнопки (после выбора)
1401+
const openDropdownBtn = document.querySelector('.drop-open'); // фиксация "открывающей" drop-кнопки
1402+
1403+
if (openDropdownBtn) {
1404+
const dropdownList = openDropdownBtn.nextElementSibling; // фиксация выпадающего списка
1405+
openDropdownBtn.classList.remove('arrow-rotate', 'drop-open'); // возврат направления стрелки, удаление "открывающего" класса
1406+
dropdownList.classList.add('d-none'); // скрытие выпадающего списка
1407+
openDropdownBtn.blur(); // снятие фокуса с кнопки (после выбора)
1408+
}
14121409
}
14131410

14141411
// автоматическое закрытие/скрытие развёрнутого выпадающего drop-списка (при работе НЕ с ним)
14151412
document.addEventListener('click', (event) => {
1416-
const openDropdown = document.querySelector('.drop-open');
1417-
if (openDropdown) {
1418-
const dropdownList = openDropdown.nextElementSibling;
1419-
1420-
// закрытие/скрытие выпадающего списка (если последующий "клик" не по нему, не по drop-кнопке)
1421-
if (
1422-
!openDropdown.contains(event.target) &&
1423-
!dropdownList.contains(event.target)
1424-
) {
1425-
closeBtnDropdown(); // вызов соответствующей функции
1426-
}
1413+
const openDropdownBtn = document.querySelector('.drop-open');
1414+
1415+
// закрытие/скрытие выпадающего списка (если последующий "клик" не по нему, не по drop-кнопке)
1416+
if (
1417+
openDropdownBtn &&
1418+
!openDropdownBtn.contains(event.target) &&
1419+
!openDropdownBtn.nextElementSibling.contains(event.target)
1420+
) {
1421+
closeBtnDropdown(); // вызов соответствующей функции
14271422
}
14281423
});
14291424

14301425
addModalWrap.addEventListener('focusout', (event) => {
1431-
const openDropdown = document.querySelector('.drop-open');
1432-
if (openDropdown) {
1433-
const dropdownList = openDropdown.nextElementSibling;
1434-
1435-
// закрытие/скрытие выпадающего списка (если "фокус" перешёл на другой элемент, в другое место)
1436-
if (
1437-
!openDropdown.contains(event.relatedTarget) &&
1438-
!dropdownList.contains(event.relatedTarget)
1439-
) {
1440-
closeBtnDropdown(); // вызов соответствующей функции
1441-
}
1426+
const openDropdownBtn = document.querySelector('.drop-open');
1427+
1428+
// закрытие/скрытие выпадающего списка (если "фокус" перешёл на другой элемент, в другое место)
1429+
if (
1430+
openDropdownBtn &&
1431+
!openDropdownBtn.contains(event.relatedTarget) &&
1432+
!openDropdownBtn.nextElementSibling.contains(event.relatedTarget)
1433+
) {
1434+
closeBtnDropdown(); // вызов соответствующей функции
14421435
}
14431436
});
14441437

0 commit comments

Comments
 (0)