jQuery悬停-添加超时中断工具提示?

时间:2019-05-22 18:34:04

标签: jquery tooltip

我正在尝试更新我的工具提示jquery代码,以便当用户将鼠标移离工具提示图标时,工具提示会在复制文本时延迟。我尝试添加此超时,该超时在第一次单击该图标时有效,但是再次单击该图标时,工具提示显示为空白。如果我删除超时代码,它将起作用。

工具提示在首次点击时起作用:

codepen

工具提示在第二次单击时显示为空白:

Tooltip Working Example

代码:

<script type="text/javascript">$(document).ready(function () {
var hoverTimeout;
// Tooltip only Text
$('.masterTooltip').hover(function () {
    // Hover over code
    clearTimeout(hoverTimeout);
    var title = $(this).attr('title');
    $(this).data('tipText', title).removeAttr('title');
    $('<p class="tooltip"></p>')
    .text(title)
    .appendTo('body')
    .fadeIn('slow');
}, function () {
    // Hover out code
    hoverTimeout = setTimeout(function () {
        $(this).attr('title', $(this).data('tipText'));
        $('.tooltip').remove();
    }, 5000);
}).click(function (e) {
    var mousex = e.pageX + 20; //Get X coordinates
    var mousey = e.pageY + 10; //Get Y coordinates
    $('.tooltip')
    .css({ top: mousey, left: mousex })
});
});</script>

1 个答案:

答案 0 :(得分:1)

您的问题:第一个函数中的$(this)涉及Object [ div.masterTooltip ](我们对单个div进行了测试,因为您的问题中未包含任何HTML),但是您的问题中的$(this)第二个函数引用Object [ Window ]。导致data('tipText')在第二个函数中未定义,因此没有插入title属性,这在第一次执行该函数后为您提供空的工具提示。

此代码应该有效:

$(document).ready(function () {
var hoverTimeout;
// Tooltip only Text
var masterTooltip = $('.masterTooltip').hover(function () {
    // Hover over code
    clearTimeout(hoverTimeout);
    var title = $(this).attr('title');
    $(this).data('tipText', title).removeAttr('title');
    $('<p class="tooltip"></p>')
    .text(title)
    .appendTo('body')
    .fadeIn('slow');
}, function () {
    // Hover out code
    hoverTimeout = setTimeout(function () {
        $(masterTooltip).attr('title', $(masterTooltip).data('tipText'));
        $('.tooltip').remove();
    }, 5000);
}).click(function (e) {
    var mousex = e.pageX + 20; //Get X coordinates
    var mousey = e.pageY + 10; //Get Y coordinates
    $('.tooltip')
    .css({ top: mousey, left: mousex })
});
});