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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Спасибо за полезное руководство. Я попытался создать воспроизводимый пример, поместив фрагмент кода в отдельный 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.
Итак, проблема решена, хотя, возможно, и неудовлетворительно. Просто опубликую это, чтобы замкнуть цикл, поблагодарите других за изменения в моем вопросе, чтобы исправить мою терминологию и прояснить фрагмент кода, а также на случай, если это будет полезно для других.
То, что вы используете, называется всплывающей подсказкой, а не всплывающим окном… Уже существует множество рабочих примеров и библиотек всплывающих подсказок, а также несколько библиотек jQuery. Вы можете использовать включенный в комплект плагин jQuery-UI Tooltip или более качественный jQuery Tooltipster... и многое другое.