JavaScript onmouseover未按预期工作

JavaScript onmouseover未按预期工作,javascript,html,javascript-events,mouseevent,Javascript,Html,Javascript Events,Mouseevent,我有这个HTML <div onmouseover="seth1();"> <a onclick="showh1();">h1</a> <a onclick="showh2();">h2</a> </div> <div id="h1" style="display: none;"></div> <div id="h2" style="display: none;"><

我有这个HTML

<div onmouseover="seth1();">
    <a onclick="showh1();">h1</a>
    <a onclick="showh2();">h2</a>
</div>

<div id="h1" style="display: none;"></div>
<div id="h2" style="display: none;"></div>
但是当我点击显示
h2
时,它也会显示
h1
,我错在哪里?我是新手,请原谅我的编码。
谢谢。

您的示例运行得很好,但发生的事情可能出乎您的意料

如果鼠标光标瞄准得太慢,则会多次触发
onmouseover
。如果您能够快速地将鼠标光标设置到
h2
链接上,那么
onmouseover
将只触发一次,并且您的
h1
div将不会显示

如果鼠标光标移动太慢,
seth1()
将被多次调用,因此会为
settime
指定多个值。如果
settime
被覆盖,则无法再取消第一个(少数)呼叫,因为它们的ID已丢失

showh2()
方法中,您可以访问settime的当前值,因此可能只会取消
seth1()
的最后一次调用。所有其他操作都将继续,因此您的
h1
DIV将在您第一次悬停第一个DIV四秒钟后显示


自己测试,检查控制台日志:

发生这种情况是因为为了单击元素

谢谢你们两位的帮助。现在我更了解我的问题了。 我终于解决了这个问题:

HTML

因此,用户只能触发seth1()一次。
谢谢你的帮助

我也可以在你的JSFIDLE中产生奇怪的结果。只需输入h1几次,然后单击h2。H1无论如何都会出现。我猜他的主要目的是取消一个超时。所以点击“h2”应该取消h1超时?我不想太苛刻,但是。。。你抄了我的JSFIDLE没有读我的答案?如果你开始多次超时,你必须取消多次超时。你不是在苛刻,也不是在“你的”JSFIDLE。我复制了你准备的小提琴,并把它改了,你是对的。。。我没有读你的答案。这是冒犯吗?我读了这个问题,解释说这就是OP想要的。我想我错了。我已经编辑了我的答案。。。我想这就是我们的初衷。只需将onmouseover更改为onmouseinter。
var settime;
function seth1() {
    settime = setTimeout('showh1();', 4000);
}
function showh1() {
    clearTimeout(settime);
    document.getElementById('h1').style.display = "block";
}
function showh2() {
    clearTimeout(settime);
    document.getElementById('h2').style.display = "block";
}
<div id="setter" onmouseover="seth1();" style="height: 10px; width: 100%;">
<div>
    <a onclick="showh1();">h1</a>
    <a onclick="showh2();">h2</a>
</div>
var settime;
function seth1() {
    settime = setTimeOut('showh1();', 4000)
    document.getElementById('setter').style.width = "0px";
}
function showh1() {
    clearTimeout(settime);
    document.getElementById('h1').style.display = "block";
}
function showh2() {
    clearTimeout(settime);
    document.getElementById('h2').style.display = "block";
}