jquery - 将鼠标悬停更改为 on mouseenter 会破坏逻辑

标签 jquery

$('.masterTooltip').hover(function() {
    // hover over code.
    var title = $(this).attr('data-submenu');

    $(this).data('tipText', title).removeAttr('title');
    $('<p class="tooltip"></p>').text(title).appendTo('body');

    var x = $(this).offset();
    var w = $('#collapsed-menu').width();
    $('.tooltip').css({ top: x.top + 'px', left: w + 'px' }).show();
}, function() {
    // Hover out code
    $(this).attr('title', $(this).data('tipText'));
    $('.tooltip').remove();
});

我的目的是制作一个工具提示,当您将鼠标悬停在 <a> 上时,它会显示一个弹出框。 。这段代码工作得很好,但是因为我的 HTML 是动态加载的,所以无法使用悬停来工作。

$('#menuMain-ul').on('mouseenter', '.masterTooltip', function() {

});

该代码仅适用于我的动态 HTML,但是当我将这两个代码组合在一起时,它不起作用。谁能帮我使用mouseenter让它发挥作用?

Normal Demo尝试将鼠标悬停在文本上

COMBINE DEMO注意到节目。

最佳答案

您的代码很接近。问题是,当使用委托(delegate)事件处理程序时,您一次只能分配一个事件处理程序,因此您需要为 mouseleave 事件再次调用 on() 。试试这个:

$('#menuMain-ul').on('mouseenter', '.masterTooltip', function() {
    var $el = $(this);
    var title = $el.data('submenu');
    $el.data('tipText', title).removeAttr('title');
    $('<p class="tooltip"></p>').text(title).appendTo('body').css({
        top: $el.offset().top,
        left: $('#collapsed-menu').width()
    }).show();
}).on('mouseleave', '.masterTooltip', function() {
    $(this).attr('title', $(this).data('tipText'));
    $('.tooltip').remove();
});

Updated fiddle

另请注意,我稍微修改了逻辑以遵循最佳实践。

关于jquery - 将鼠标悬停更改为 on mouseenter 会破坏逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40545819/

相关文章:

javascript - 将元素索引与主干 JS .get 模型事件连接起来

jquery - 使用 HTML ID 作为数组

javascript - 滑动包装器可阻止页面上的所有点击事件

javascript - 在 JS/jquery 的帮助下动态地从模态中删除图像

jquery - AngularJS 中的 Jquery $(this).val() 等价物是什么?如果更新后输入字段为空,如何将输入字段值设置为零?

javascript - Vimeo 不响应 iOS 应用程序中的 Javascript

javascript - 从 javascript 设置 HTML 元素的值

javascript - Facebook - 可以通过图形 Api 获取 friends_online_presence

javascript - 动态地在左侧显示具有相同类的 div,在右侧显示下一个类等等?

jquery - AJAX 成功加载的元素未响应 .click 函数