Skip to content

Commit 5442c7b

Browse files
committed
[PRAC/cont] Add ability to select by TAB/Enter
Realiz "add-modal" dropdown menu/items selection and by TAB/Enter. Worth noting: - a small optimization of the code, i.e. moving the "common" logic into two local functions. core: B-3 / JS-BL
1 parent c3a7ea8 commit 5442c7b

File tree

1 file changed

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

1 file changed

+29
-11
lines changed

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

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -739,8 +739,7 @@
739739
addModalContactElement.style.opacity = '1';
740740
}, 10);
741741

742-
// добавление контакта в массив
743-
addModalContactsArr.push(addModalContactElement);
742+
addModalContactsArr.push(addModalContactElement); // добавление контакта во внешний/глобальный массив
744743

745744
// исключение ещё/прожатия кнопки "Добавить контакт", если контактов/уже 10 (вывод сообщения)
746745
if (addModalContactsArr.length >= 10) {
@@ -750,36 +749,55 @@
750749

751750
// показ/скрытие выпадающего списка вариантов/контактов
752751
addModalContactDropBtn.addEventListener('click', (event) => {
753-
event.currentTarget.focus(); // добавление фокуса кнопке (до момента выбора)
754752
event.currentTarget.classList.toggle('arrow-rotate'); // переключение направления стрелки
755753
addModalContactList.classList.toggle('d-none');
754+
755+
if (!addModalContactList.classList.contains('d-none')) {
756+
event.currentTarget.focus(); // добавление фокуса кнопке (до момента выбора)
757+
}
756758
});
757759

758760
const allModalContactsListItems = document.querySelectorAll(
759761
'.modal__add-body-add-contact-item'
760762
);
761763

762-
// замена/обновление содержимого/контента кнопки (согласно значений li/вариантов)
764+
// замена/обновление содержимого/контента кнопки, так и через TAB/Enter (согласно значений li/вариантов)
763765
addModalContactList.addEventListener('click', (event) => {
764766
if (event.target.tagName === 'LI') {
765-
const selectedItemValue = event.target.getAttribute('data-value');
766-
addModalContactDropBtn.textContent = event.target.textContent;
767-
addModalContactList.classList.add('d-none'); // скрытие выпадающего списка
768-
addModalContactDropBtn.classList.remove('arrow-rotate'); // возврат направления стрелки
769-
addModalContactHiddenInput.value = selectedItemValue; // обновление данных в "скрытом" input (для последующей отправки на сервер)
767+
getContactSelection(event.target); // отработка выбора
768+
}
769+
});
770+
771+
addModalContactList.addEventListener('keydown', (event) => {
772+
if (event.target.tagName === 'LI' && event.key === 'Enter') {
773+
event.preventDefault(); // исключение непредвиденных событий/поведения
774+
getContactSelection(event.target); // отработка выбора
770775
}
771776
});
772777

778+
function getContactSelection(target) {
779+
const selectedItemValue = target.getAttribute('data-value');
780+
addModalContactDropBtn.textContent = target.textContent;
781+
addModalContactHiddenInput.value = selectedItemValue; // обновление данных в "скрытом" input (для последующей отправки на сервер)
782+
closeBtnDropdown(); // закрытие выпадающего списка
783+
}
784+
785+
function closeBtnDropdown() {
786+
addModalContactList.classList.add('d-none'); // скрытие выпадающего списка
787+
addModalContactDropBtn.classList.remove('arrow-rotate'); // возврат направления стрелки
788+
addModalContactDropBtn.blur(); // снятие фокуса с кнопки (после выбора)
789+
}
790+
773791
// организация удаления строки контактов
774792
addModalContactXBtn.addEventListener('click', (event) => {
775-
event.stopPropagation(); // исключение не предвиденных событий/поведения
793+
event.stopPropagation(); // исключение непредвиденных событий/поведения
776794
deleteModalContactsElement(event); // удаление строки контактов (посредствам "X" кнопки)
777795
});
778796

779797
// организация удаления строки контактов и через TAB/Enter
780798
addModalContactXBtn.addEventListener('keydown', (event) => {
781799
if (event.key === 'Enter') {
782-
event.stopPropagation(); // исключение не предвиденных событий/поведения
800+
event.stopPropagation(); // исключение непредвиденных событий/поведения
783801
deleteModalContactsElement(event); // удаление строки контактов (посредствам "X" кнопки)
784802
}
785803
});

0 commit comments

Comments
 (0)