Непоследовательное поведение CSS для пользовательской подсказки JavaScript

Я создал на своем сайте всплывающую подсказку «onmouseover». Как вы увидите в приведенном ниже коде, есть две всплывающие подсказки, связанные с двумя разными элементами div.

Я установил точки останова в файле сценария и определил, что оба элемента правильно запускают события onmouseover и onmouseout и что каждый всплывающий элемент span правильно обнаруживается с правильно добавленным/удаленным классом show.

Однако только второй (quantity) работает нормально. Первый (remove) не появится. Может ли кто-нибудь заметить, чего мне не хватает?

(Любой, кто знаком с WordPress/WooCommerce, поймет, что это WC-сайт. Я упоминаю об этом на случай, если возникнет конфликт, который я не вижу в стилях окна отладки.)

Код ниже адаптирован из https://www.w3schools.com/howto/howto_js_popup.asp (отдавая должное там, где оно необходимо!):

function togglePopup(element, onoff) {
    var popup = document.getElementById(element.id + "_popup");
    if (popup) {
        if (onoff) {
            popup.classList.add("show");
        }
        else {
            popup.classList.remove("show");
        }
    }
}
.popup {
    position: relative;
    display: inline-block;
    cursor: pointer;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

/* The actual popup */
.popup .popuptext {
    visibility: hidden;
    width: 160px;
    background-color: #555;
    color: #fff;
    text-align: center;
    border-radius: 6px;
    padding: 8px 8px 8px 8px;
    position: absolute;
    z-index: 1;
    bottom: 125%;
    left: 50%;
    margin-left: -80px;
}

/* Popup arrow */
.popup .popuptext::after {
    content: "";
    position: absolute;
    top: 100%;
    left: 50%;
    margin-left: -5px;
    border-width: 5px;
    border-style: solid;
    border-color: #555 transparent transparent transparent;
}

/* Toggle this class - hide and show the popup */
.popup .show {
    visibility: visible;
    -webkit-animation: fadeIn 1s;
    animation: fadeIn 1s;
}

/* Add animation (fade in the popup) */
@-webkit-keyframes fadeIn {
    from {
        opacity: 0;
    }

    to {
        opacity: 1;
    }
}

@keyframes fadeIn {
    from {
        opacity: 0;
    }

    to {
        opacity: 1;
    }
}
<br><br>
<table class = "shop_table shop_table_responsive cart woocommerce-cart-form__contents" cellspacing = "0">
   <tbody>
      <tr class = "woocommerce-cart-form__cart-item cart_item">
         <td class = "product-remove">
            <div class = "popup" onmouseover = "togglePopup(this, true);" onmouseout = "togglePopup(this, false);" id = "addon_remove_link">
               <label class = "remove">&times;</label>
               <span class = "popuptext" id = "addon_remove_link_popup">To remove add-on items, you must remove associated products</span>
            </div>
         </td>
         <td class = "product-quantity" data-title = "Quantity">
            <div class = "quantity popup" onmouseover = "togglePopup(this, true);" onmouseout = "togglePopup(this, false);" id = "addon_quantity">
               <label class = "screen-reader-text" for = "quantity_6658f8f611307">Thread - GutermannMatching thread for selected items quantity</label>
               <input readonly type = "number" id = "quantity_6658f8f611307" class = "input-text qty text" name = "cart[8f818faae39eca624255ff021f2f2afb][qty]" value = "1" aria-label = "Product quantity" size = "4" min = "0" max = "100" step = "1" placeholder = "" inputmode = "" autocomplete = "off" />
               <span class = "popuptext" id = "addon_quantity_popup">To change add-on quantities, you must add/remove associated products</span>
            </div>
         </td>
      </tr>
   </tbody>
</table>

То, что вы используете, называется всплывающей подсказкой, а не всплывающим окном… Уже существует множество рабочих примеров и библиотек всплывающих подсказок, а также несколько библиотек jQuery. Вы можете использовать включенный в комплект плагин jQuery-UI Tooltip или более качественный jQuery Tooltipster... и многое другое.

LoicTheAztec 31.05.2024 03:53

Преобразовал ваш код в исполняемый фрагмент, и обе всплывающие подсказки работают нормально. В зависимости от того, где расположена таблица на вашей странице и достаточно ли места вокруг нее, они, возможно, могут быть частично скрыты? (Я добавил два <br> во фрагмент, чтобы таблица немного опустилась.) Нам понадобится от вас минимально воспроизводимый пример, который действительно поможет воспроизвести проблему.

CBroe 31.05.2024 08:28
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Спасибо за полезное руководство. Я попытался создать воспроизводимый пример, поместив фрагмент кода в отдельный html-файл, но мне не удалось его воспроизвести, как отмечали другие в комментариях. Подсказки работали как положено.

ОДНАКО, в процессе этого я изменил атрибуты id в элементах div и span в разделе удаления с «addon_remove_link» и «addon_remove_link_popup» на «addon_remove» и «addon_remove_popup». Это сработало!

Я не знаю, почему это не было проблемой в моем автономном html-файле, но была проблема на сайте wordpress/woocommerce. Изменение атрибутов id на «addon_remove_link2» и «addon_remove_link2_popup» также сработало. Итак, что-то в конкретных атрибутах id, которые я использовал, было проблемой. Это было верно, даже если я переместил атрибут id и события onmouseover и onmouseout в сам label вместо div.

Итак, проблема решена, хотя, возможно, и неудовлетворительно. Просто опубликую это, чтобы замкнуть цикл, поблагодарите других за изменения в моем вопросе, чтобы исправить мою терминологию и прояснить фрагмент кода, а также на случай, если это будет полезно для других.

Другие вопросы по теме