Javascript 如果mouseover事件内触发mousedown,则立即返回,而不执行chained mouseout事件

Javascript 如果mouseover事件内触发mousedown,则立即返回,而不执行chained mouseout事件,javascript,jquery,mouseover,jquery-events,mousedown,Javascript,Jquery,Mouseover,Jquery Events,Mousedown,不知道该怎么做,但基本上我编写了一个工具提示插件,它可以删除mouseout或mousedown上的工具提示 如果触发了mousedown事件,它将删除$that.parent(),这很好,并且会删除工具提示,但是如果用户也触发mouseout事件(这是因为mouseover和mouseout事件当前已链接),然后它将删除另一个我不想要的DOM元素。所以本质上我想知道这是否可能: $that.on('mouseover', function() { // If this event i

不知道该怎么做,但基本上我编写了一个工具提示插件,它可以删除
mouseout
mousedown
上的工具提示

如果触发了
mousedown
事件,它将删除
$that.parent()
,这很好,并且会删除工具提示,但是如果用户也触发mouseout事件(这是因为
mouseover
mouseout
事件当前已链接),然后它将删除另一个我不想要的DOM元素。所以本质上我想知道这是否可能:

$that.on('mouseover', function() {

    // If this event is triggered within the mouseover event, don't run the chained mouseout event
    $that.on('mousedown', function() {
        $that.parent().next().fadeOut(100).remove();
        return false;
    });
}).mouseout(function() {
  // If they clicked above, don't run this
    $that.parent().next().fadeOut(100).remove();
});​
据我所知,如果不使用全局变量,则很难访问
鼠标向下
事件中单击的
布尔集,例如:

$that.on('mouseover', function() {
    clicked = false;
    // If this event is triggered within the mouseover event, don't run the chained mouseout event
    $that.on('mousedown', function() {
        clicked = true;
        $that.parent().next().fadeOut(100).remove();
        return false;
    });
}).mouseout(function() {
    // If they clicked above, don't run this
    if (clicked) {
        $that.parent().next().fadeOut(100).remove();
    }
});​
你有没有想过如何优雅地建造这个建筑

编辑:
$that.parent().next()
中的元素只是工具提示文本


但是这应该是不相关的,因为我想知道如果
mouseover
是在不使用全局变量的情况下触发的,是否可以从
mouseover
函数返回。

您不需要
mouseover

$that.on('mouseleave mouseup', function(e) {
     if( e.type === 'mouseleave'){
         // do the mouseleave stuff
     }else{
         // do the mouseup stuff
     }
});​

正如您所说,如果元素是动态创建的,您应该使用:


$(document).on('mouseleave mouseup',$that,函数(e){
您不需要
鼠标盖

$that.on('mouseleave mouseup', function(e) {
     if( e.type === 'mouseleave'){
         // do the mouseleave stuff
     }else{
         // do the mouseup stuff
     }
});​

正如您所说,如果元素是动态创建的,您应该使用:


$(document).on('mouseleave mouseup',$that,function(e){

您是否考虑过像这样简单地使用类过滤器

$that.parent().next('.js-tooltip').fadeOut(100).remove();
如果下一个不是工具提示,就我所知,应该可以解决这个问题,那么这根本不会起任何作用

使用您建议的方法,执行
$that.clicked=false
会更清晰

或者(如果你想保留鼠标盖——这只是为了演示原理;我不确定它是否会像这样工作):


您是否考虑过像这样简单地使用类过滤器

$that.parent().next('.js-tooltip').fadeOut(100).remove();
如果下一个不是工具提示,就我所知,应该可以解决这个问题,那么这根本不会起任何作用

使用您建议的方法,执行
$that.clicked=false
会更清晰

或者(如果你想保留鼠标盖——这只是为了演示原理;我不确定它是否会像这样工作):


你应该更好地解释一下哪些元素是精确指向的:
$that.parent().next().fadeOut(100.remove();
我的意思是:
$that
,什么元素是:
parent
,谁是:
.next()
?你说过$that.parent()会删除工具提示,但它的目的是什么???@RokoC.Buljan
$that.parent().next()
是在单击当前元素后克隆并插入到DOM中的工具提示。
$that
在本例中指的是一个名为“取消”的输入按钮,该按钮添加了带有一些文本的工具提示:“放弃更改”你应该更好地解释一下哪些元素是精确指向的:
$that.parent().next().fadeOut(100.remove();
我的意思是:
$that
,什么元素是:
parent
,谁是:
.next()
?你说过$that.parent()会删除工具提示,但它的目的是什么???@RokoC.Buljan
$that.parent().next()
是在单击当前元素后克隆并插入到DOM中的工具提示。
$that
在本例中指的是一个名为“取消”的输入按钮,该按钮添加了带有一些文本的工具提示:“放弃更改”哥们!我不知道为什么我以前没有瞄准
.js工具提示
。这更有意义,现在我的附加元素没有被删除。谢谢!!!哥们!我不知道为什么我以前没有瞄准
.js工具提示
。这更有意义,现在我的附加元素没有被删除。谢谢!!!尽管如此is没有解决我的问题,它通过e.mouseleave向我介绍了一种新的事件检测方式,我以前从未知道我能做到。非常感谢!!!虽然这没有解决我的问题,但它通过e.mouseleave向我介绍了一种新的事件检测方式,我以前从未知道我能做到。非常感谢!!!