jQuery悬停和取消悬停

我有以下代码
$('a.uiPopup').hover(function () {          
            $('.uiTip').show();
        },function () {
            $('.uiTip').remove();
        });

        $('div.uiTip').live("mouSEOver",function () {
            $(this).stop(true,true).show();
        });
        $('div.uiTip').live("mouseleave",function () {
            $(this).remove(); });
        });

因此,当你悬停uiPopup然后uiTip出现然后当你解开它再次消失但是如果你将鼠标悬停在尖端上它会阻止尖端被移除并保持在屏幕上直到你的鼠标离开然后将其移除.

虽然不起作用:/任何想法?谢谢

.remove()故意在我的真实脚本中(这是显示我的示例的片段)我使用AJAX加载.uiHelp并且它们具有unqiue id(在上面的示例中再次未显示超出范围问题)当用户悬停尖端本身时,哪一切都可以正常工作!

编辑:对于那些想要查看完整脚本以及为什么我必须使用悬停的人:

$('a.uiPopup').hover(function () {
            $tip = '<div class="uiTip uiOverlayArrowLeft loading"><div class="uiOverlayContent"><!--content here --></div><i class="uiOverlayArrow"></i></div>';

            $newtip = $($tip).attr('id','organisationId-' + $(this).attr('id'));

            $($newtip).find('.uiOverlayContent').load(AppURL + 'Organisations/Manage/Tip',function () { $($newtip).removeClass('loading') });

            $('body').append($newtip);

            $location = $(this).offset(); $top = $location.top; $left = $location.left; $right = $location.right; $bottom = $location.bottom;

            $left = $left + $(this).width();
            $left = $left + 8;

            $top = $top - 10;

            $($newtip).css({
                'top': $top + 'px','left': $left + 'px'
            });
        },function () {
            $id = "div#organisationId-" + $(this).attr('id');
            $($id).remove();
        });

        $('div.uiTip').live("mouSEOver",function () {
            $(this).remove(); });
        });

解决方法

好吧,你在一个片段中提到了uiTip,在另一个片段中提到了uiHelp. uiTip在uiHelp div中的某个地方吗?如果是这样,问题是您的鼠标离开链接获取工具提示div的顶部,因此在您的鼠标被认为“超过”div之前将其删除.

这是一个可能的解决方案:

$('a.uiPopup').hover(function () {
  $('.uiHelp').show();
},function () {
  $('.uiHelp').data('timer',setTimeout(function () {
    $('.uiHelp').remove();
  },100));
});

$('div.uiHelp').live('mouSEOver',function () {
  if ($(this).data('timer')) {
    clearTimeout($(this).data('timer'));
  }
});

$('div.uiHelp').live('mouseleave',function () {
  $(this).remove();
});

这使得用户在工具提示消失之前可以通过工具提示获得十分之一秒.您可以在setTimeout调用中调整该时间.

我会把它留给你来解决uiTip / uiHelp – 你只需要在某个地方存储对计时器的引用.

相关文章

jQuery插件的种类 1、封装对象方法 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进...
扩展jQuery插件和方法的作用是非常强大的,它可以节省大量开发时间。 入门 编写一个jQuery插件开始于给...
最近项目中需要实现3D图片层叠旋转木马切换的效果,于是用到了jquery.roundabout.js。 兼容性如图: ht...
一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有异...
AMD 模块 AMD(异步模块定义,Asynchronous Module Definition)格式总体的目标是为现在的开发者提供一...