gpt4 book ai didi

javascript - 为什么我第二次悬停在某个元素上时它消失了?

转载 作者:行者123 更新时间:2023-11-30 10:12:23 25 4
gpt4 key购买 nike

我正在尝试创建一个代码,当您将鼠标悬停在一个跨度上几秒钟时,会出现一个框,如果您将鼠标放在该框上,它会静止不动而不会再次淡出。示例代码是这样的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>I'm a pathetic programmer please don't flame me</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript">
$(function() {
var b = 1000;
var c = $('#box');
var d = function(a) {
if (a) {
c.fadeOut(500)
} else {
c.fadeIn(500)
}
};
$('span').mouseenter(function() {
e = setTimeout(function() {
d()
}, b);
$(this).mouseleave(function() {
typeof e != 'undefined' && clearTimeout(e);
f = setTimeout(function() {
d(1)
}, 300)
})
});
c.mouseenter(function() {
clearTimeout(f);
typeof g != 'undefined' && clearTimeout(g)
}).mouseleave(function() {
g = setTimeout(function() {
d(1)
}, 300)
})
});
</script>
<style type="text/css" media="screen">
#box {
display: none;
width: 100px;
height: 100px;
background-color: lightblue;
}
</style>
</head>
<body>
<span>HOVER ME</span>
<div id="box"></div>
</body>
</html>

编辑: 用于实时测试的 JS fiddle:http://jsfiddle.net/2ogcp9tm/

问题是代码在我第一次运行时运行良好,但如果我第二次悬停跨度并尝试将鼠标放在蓝色框上,它无论如何都会消失。

为什么会这样?

最佳答案

每次输入 span 时,您都会为该 span 绑定(bind)一个 mouseleave 处理程序。因此,如果您多次输入一个跨度,当您离开它时,您将多次运行 mouseleave 处理程序。其中每一个都会调用 setTimeout(),但是 f 只会被设置为最后一个。所以当你稍后执行 clearTimeout(f) 时,它只会清除其中一个,其他的继续运行。

将一个事件处理程序绑定(bind)到另一个事件处理程序中几乎是不对的。事件处理程序通常应该在顶层定义。如果您希望一个处理程序依赖于其他某个处理程序是否先运行,请使用变量来跟踪它。

关于javascript - 为什么我第二次悬停在某个元素上时它消失了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25784782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com