【问题标题】:onmouseover function working, but onmouseout function is not?onmouseover 函数可以工作,但是 onmouseout 函数不行吗?
【发布时间】:2020-11-20 03:37:17
【问题描述】:

现在我正在尝试在另一个元素悬停时显示覆盖 div,并且我正在使用 onmouseoutonmouseover 属性执行此操作。在最初显示的元素中,我有一个带有唯一项目代码的 h1 和该项目的图像。我还有另一个默认设置为 display: none 的 div,其 id 是与项目对应的代码。我希望这个 div 在悬停时显示,并在鼠标移开时消失。

在 HTML 代码中,我指定了在 mouseover 和 mouseout 上运行的函数,然后在这些函数的 Javascript 中,我首先获取 h1 及其唯一的项目代码,然后选择隐藏的 div,其 id 为要显示或隐藏的项目代码。我的显示和隐藏功能之间的唯一区别是style.display,因为它要么是“阻止”,要么是“无”。 show 功能完美运行,隐藏的 div 显示出来。但是,当我将鼠标移出时,div 并没有像预期的那样消失。谁能帮我弄清楚为什么?

function showstatus(object) {
  code = object.querySelector('h1').innerHTML;
  document.querySelector(`#${code}`).style.display = "block";
}

function normalize(object) {
  code = object.querySelector('h1').innerHTML;
  document.querySelector(`#${code}`).style.display = "none";
}
{% for listing, specs in a_dict %}
<div class="list-item" onmouseover="showstatus(this)" onmouseout="normalize(this)">
  <h1 class="hidden">{{listing}}</h1>
  <img src="image link that I didn't include" class="item-thumbnail">
</div>
{% endfor %}

【问题讨论】:

    标签: javascript html jquery onmouseover onmouseout


    【解决方案1】:

    在 div 上使用 onmouseleave 而不是 onmouseover

    function showstatus(object) {
        code = object.querySelector('h1').innerHTML
        document.querySelector(`#${code}`).style.display="block";
    }
    
    function normalize(object) {
        code = object.querySelector('h1').innerHTML
        document.querySelector(`#${code}`).style.display="none";
    }
    <div class="list-item" onmouseover="showstatus(this)" onmouseleave="normalize(this)">
           <h1 class="hidden">{{listing}}</h1>
           <img src="image link that I didn't include" class="item-thumbnail">
    </div>

    这是这样做的另一种方法:

    document.getElementById('div').onmouseover = showstatus(document.getElementById('div'))
    document.getElementById('div').onmouseout = normalize(document.getElementById('div'))
    
    function showstatus(object) {
        code = object.querySelector('h1').innerHTML
        document.querySelector(`#${code}`).style.display="block";
    }
    
    function normalize(object) {
        code = object.querySelector('h1').innerHTML
        document.querySelector(`#${code}`).style.display="none";
    }
    <div id="div" class="list-item">
           <h1 class="hidden">{{listing}}</h1>
           <img src="image link that I didn't include" class="item-thumbnail">
    </div>

    【讨论】:

    • 这似乎仍然不起作用,我也没有在控制台或终端中收到任何错误消息
    • 你能告诉我什么不起作用的确切细节吗?
    • 我添加了一种替代方法,我认为它适用于您的情况。
    • onmouseleave 不起作用,因此该功能未运行。所以基本上当我的鼠标离开 div 时没有任何反应
    • 可以,但是在我的实际 html 代码中,我正在运行一个 for 循环(使用 Django),所以我不能执行 id 方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2014-07-21
    • 2014-04-21
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多