jquery - div 的状态存储在哪里?

标签 jquery

我正在寻找使用 jQuery 实现此目的的最佳方法:当我将鼠标悬停在链接上时,它旁边会显示一个 div。当我停止悬停后它又被隐藏了。如果我单击该链接,div 将保持不变,直到再次单击。

这对我来说似乎是一个自然的解决方案,但我是 jQuery 的新手,希望得到建议:将 link.hover 和 link.click 连接到执行上述操作的逻辑,将“已单击” bool 值存储为数据链接上的属性。

这是一个好的方法,还是迂回的方法?

最佳答案

这是我认为您正在寻找的示例。当您将鼠标悬停在 a 上时显示/隐藏 div,并在单击 a 时保持 div 可见.

$(document).ready(() => {

    $("#thelink").on('mouseover', () => {
        // Change state if the link hasn't been clicked, otherwise do nothing
        if ($('#thelink').data("clicked") == false) {
            $("#thediv").show();
        }
    });

    $("#thelink").on('mouseout', () => {
        // Change state if the link hasn't been clicked, otherwise do nothing
        if ($('#thelink').data("clicked") == false) {
            $("#thediv").hide();
        }
    });

    $("#thelink").on('click', () => {
        $("#thelink").data("clicked", true);
        $("#thediv").show();
    });
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<a id="thelink" href="javascript:void(0)" data-clicked="false">The link</a>

<div hidden id="thediv">I am usually hidden. Mouse over the link to see me. Click on it and I'll stay visible.</div>

顺便说一句,这一切都可以使用 vanilla js 轻松完成。我喜欢向人们展示,现在很多事情都不需要 jQuery,所以对于 vanilla js 来说也是如此:

document.addEventListener('DOMContentLoaded', () => {

    document.getElementById('thelink').addEventListener('mouseover', () => {
        const linkClicked = JSON.parse(document.getElementById('thelink').dataset['clicked']);
        if(linkClicked == false) {
            document.getElementById('thediv').hidden = false;
        }
    });

    document.getElementById('thelink').addEventListener('mouseout', () => {
        const linkClicked = JSON.parse(document.getElementById('thelink').dataset['clicked']);
        if(linkClicked == false) {
            document.getElementById('thediv').hidden = true;
        }
    });

    document.getElementById('thelink').addEventListener('click', () => {
        document.getElementById('thelink').dataset['clicked'] = true;
        document.getElementById('thediv').hidden = false;
    });

})
<a id="thelink" href="javascript:void(0)" data-clicked="false">The link</a>

<div hidden id="thediv">I am usually hidden. Mouse over the link to see me. Click on it and I'll stay visible.</div>

当然,有点详细,但您不依赖于外部库。如果 jQuery 让您的生活更轻松,请务必使用它,但请至少考虑一下您是否真的需要它。

关于jquery - div 的状态存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59966829/

相关文章:

javascript - 循环数据

javascript - 将数据属性设置为按钮并链接所述 attr jquery 的值

javascript - 在响应中查找 div#,如果数据为 1

javascript - 复制到剪贴板不起作用javascript

javascript - 将 javascript var 值发送到 php 页面(不是 ajax)

javascript - 我如何使用 escape 关闭预览窗口,该窗口将要求用户输入他的名字

javascript - 如果第一个 child 有任何负值,getBoundingClientRect() 为所有 child 返回相同的值

javascript - 在页面内包含 API 调用以延迟加载

javascript - 使用 jQuery 显示/隐藏多个 <span>

javascript - 我有一个包含三个元素的 CSS 导航栏。我想让每个链接显示自己的内容而不与另一个链接重叠