[英]JavaScript onmouseover not working as expected
我有这个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>
并且此javascript在4秒后自动显示h1
或当用户单击时显示两者之一
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";
}
但是,当我单击以显示h2
它也会显示h1
,我在哪里错了? 我是新手,请原谅我的编码。 谢谢。
您的示例运行良好,但是发生了您可能没有想到的事情。
如果您的鼠标光标瞄准得太慢, onmouseover
会被触发多次。 如果您可以设法将鼠标光标真正快速地设置到h2
链接上,则onmouseover
将仅触发一次,并且h1
div不会显示。
如果您将鼠标光标移动得太慢, seth1()
多次调用seth1()
,因此将多个值分配给settime
。 如果settime
被覆盖,则第一个(很少)调用无法取消,因为它们的ID已消失。
在showh2()
方法中,您可以访问settime的当前值,因此可能只有最后一次调用seth1()
会被取消。 所有其他内容都将继续,因此在您第一次将第一个DIV悬停后,您的h1
DIV将显示四秒钟。
自己进行测试,检查控制台日志: https : //jsfiddle.net/krbbyzaq/2/
发生这种情况的原因是,为了单击元素<a onclick="showh2();">h2</a>
,您必须在包装div中触发mouseover事件。 如果您不想在单击该元素时触发鼠标悬停,则应将事件侦听器应用于相同的元素并将其从包装div中删除。 您还应该尝试探索onmouseenter
事件。 它可以更好地满足您的特定需求。
检查此示例以查看您是否在寻找它-> https://jsfiddle.net/krbbyzaq/4/
谢谢两个人的帮助。 现在我更好地了解了我的问题。 我终于解决了:
HTML
<div id="setter" onmouseover="seth1();" style="height: 10px; width: 100%;">
<div>
<a onclick="showh1();">h1</a>
<a onclick="showh2();">h2</a>
</div>
JavaScript的
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";
}
因此,用户只能触发一次seth1()。 非常感谢您的帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.