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向我介绍了一种新的事件检测方式,我以前从未知道我能做到。非常感谢!!!