|
1440 | 1440 | event.stopPropagation(); |
1441 | 1441 | }); |
1442 | 1442 |
|
1443 | | - // вызов/инициализация tooltips для "X" кнопки (для кнопки удаления строки контактов) |
1444 | | - initTippy('.modal__add-body-add-x-btn', 'удалить контакт', 'top'); |
| 1443 | + // вызов/инициализация tooltips для "X" кнопки (для кнопки удаления строки контактов, с задержкой) |
| 1444 | + setTimeout(() => { |
| 1445 | + initTippy(addModalContactXBtn, 'удалить контакт', 'top'); |
| 1446 | + }, 0); |
1445 | 1447 |
|
1446 | 1448 | // организация удаления строки контактов |
1447 | 1449 | addModalContactXBtn.addEventListener('click', (event) => { |
|
1528 | 1530 |
|
1529 | 1531 | // ** удаление строки контактов в add-модальном окне (через "X" кнопку, с/без уточняющего сообщения) |
1530 | 1532 | function deleteModalContactsElement(event) { |
1531 | | - const clickedContactsXBtn = event.target; |
| 1533 | + const clickedContactsXBtn = event.currentTarget; // получение ИМЕННО кнопки, а не/может внутренней иконки (согласно "размазанного" события) |
| 1534 | + |
| 1535 | + if (clickedContactsXBtn) { |
| 1536 | + tippy.hideAll(); // предварительное скрытие всех/вдруг "активных" tooltips (перед удалением искомой строки) |
1532 | 1537 |
|
1533 | | - if (clickedContactsXBtn.classList.contains('add-modal-delete-btn')) { |
1534 | 1538 | // фиксация родительского элемента |
1535 | 1539 | const modalContactsElement = clickedContactsXBtn.closest( |
1536 | 1540 | '.modal__add-body-add-contact-element' |
1537 | 1541 | ); |
1538 | 1542 |
|
1539 | 1543 | if (modalContactsElement) { |
| 1544 | + // удаление/исключение привязанного tooltip (к конкретной строке/кнопке) |
| 1545 | + if (clickedContactsXBtn._tippy) { |
| 1546 | + clickedContactsXBtn._tippy.destroy(); |
| 1547 | + } |
| 1548 | + |
1540 | 1549 | // определение заполненности инпута в данной строке контакта |
1541 | 1550 | const currentInput = modalContactsElement.querySelector( |
1542 | 1551 | '.modal__add-body-add-contact-input' |
|
1580 | 1589 |
|
1581 | 1590 | // ** дополнительная/местная организация логики для tooltips (т.е. помимо customTippy.js) |
1582 | 1591 | function initTippy(selector, content, side) { |
| 1592 | + // определение входящего элемента (селектор или DOM-элемент, поиск/корректировка) |
| 1593 | + const elements = |
| 1594 | + typeof selector === 'string' |
| 1595 | + ? document.querySelectorAll(selector) |
| 1596 | + : [selector]; |
| 1597 | + |
1583 | 1598 | if (typeof tippy === 'function') { |
1584 | | - tippy(selector, { |
1585 | | - content: content, |
1586 | | - theme: 'main', |
1587 | | - delay: [50, 0], |
1588 | | - offset: [0, 13], |
1589 | | - placement: side, |
1590 | | - animation: 'scale', // анимация появления/скрытия (через дополнительный файл/подключение) |
1591 | | - trigger: 'mouseenter', // только по наведению мыши (исключение вывода по клику, в другом месте) |
1592 | | - |
1593 | | - onShow(instance) { |
1594 | | - setTimeout(() => { |
1595 | | - instance.hide(); // автоматическое скрытие (по истечению времени) |
1596 | | - }, 1000); |
1597 | | - }, |
1598 | | - |
1599 | | - // точечная корректировка стилей (для "стрелки" подсказки) |
1600 | | - onMount(instance) { |
1601 | | - const arrowElement = instance.popper.querySelector('.tippy-arrow'); |
1602 | | - arrowElement.style.marginBottom = '-1px'; |
1603 | | - }, |
| 1599 | + elements.forEach((el) => { |
| 1600 | + if (!el._tippy) { |
| 1601 | + tippy(el, { |
| 1602 | + content, |
| 1603 | + theme: 'main', |
| 1604 | + delay: [50, 0], |
| 1605 | + offset: [0, 13], |
| 1606 | + placement: side, |
| 1607 | + animation: 'scale', // анимация появления/скрытия (через дополнительный файл/подключение) |
| 1608 | + trigger: 'mouseenter', // только по наведению мыши (исключение вывода по клику, в другом месте) |
| 1609 | + |
| 1610 | + onShow(instance) { |
| 1611 | + setTimeout(() => instance.hide(), 1000); // автоматическое скрытие (по истечению времени) |
| 1612 | + }, |
| 1613 | + |
| 1614 | + // точечная корректировка стилей (для "стрелки" подсказки) |
| 1615 | + onMount(instance) { |
| 1616 | + const arrowElement = |
| 1617 | + instance.popper.querySelector('.tippy-arrow'); |
| 1618 | + arrowElement.style.marginBottom = '-1px'; |
| 1619 | + }, |
| 1620 | + }); |
| 1621 | + } |
1604 | 1622 | }); |
1605 | 1623 | } else { |
1606 | 1624 | console.error('Tippy.js is not loaded!'); |
|
0 commit comments