首页 > 编程语言 >html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化

html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化

时间:2024-07-29 21:40:43浏览次数:13  
标签:style container javascript none 点击 html display card

html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化。
原来的代码如下:

<div class="card card col-sm-6 col-md-4 col-xl-2 col-lg-2 justify-content-center bg-secondary-subtle"
         id="tools-trigger">
        <a href="javascript:void(0);" onclick="toggleToolsVisibility('tools-container')" title="AI工具集">
            <div class="card-body py-2 px-3">
                <img src="{% static 'app1/img/web-favicon/2530806_general_office_repair_repair tool_screwdriver_icon.svg' %}"
                     alt=""/>
                <span>工具</span>
            </div>
        </a>
    </div>
    <div class="row links-tools" id="tools-container">
        <div class="card">
            <a href="https://www.yuque.com/yihulaojiu-gsfg9/zz2qv5/vixkf6" target="_blank" title="Adobe">
                <div class="card-body py-2 px-3">
                    <img src="{% static 'app1/img/web-favicon/adobe.svg' %}" alt=""/>
                    <span>Adobe全家桶</span>
                </div>
            </a>
        </div>
    </div>
与下方js配合
function toggleToolsVisibility(containerId) {
    let cards = document.querySelectorAll(`#${containerId} .card`);
    cards.forEach(function (card) {
        if (card.id !== `${containerId}`) {
            card.style.display = card.style.display === 'block' ? 'none' : 'block';
        }
    });
}

点击两次才能显示隐藏的内容,问题出在 toggleToolsVisibility 函数的实现上。当前的逻辑是遍历 #tools-container 下的所有 .card 元素,并根据它们的显示状态进行切换。然而,这个逻辑并没有考虑到初始状态下某些元素可能是隐藏的,因此需要点击两次才能正确显示或隐藏内容。

我们可以通过检查元素的 display 属性来确定它们是否可见,并在第一次点击时将其设置为可见。以下是改进后的代码:

<div class="card col-sm-6 col-md-4 col-xl-2 col-lg-2 justify-content-center bg-secondary-subtle" id="tools-trigger">
    <a href="javascript:void(0);" onclick="toggleToolsVisibility('tools-container')" title="AI工具集">
        <div class="card-body py-2 px-3">
            <img src="{% static 'app1/img/web-favicon/2530806_general_office_repair_repair tool_screwdriver_icon.svg' %}" alt=""/>
            <span>工具</span>
        </div>
    </a>
</div>
<div class="row links-tools" id="tools-container" style="display: none;">
    <div class="card">
        <a href="https://www.yuque.com/yihulaojiu-gsfg9/zz2qv5/vixkf6" target="_blank" title="Adobe">
            <div class="card-body py-2 px-3">
                <img src="{% static 'app1/img/web-favicon/adobe.svg' %}" alt=""/>
                <span>Adobe全家桶</span>
            </div>
        </a>
    </div>
</div>
function toggleToolsVisibility(containerId) {
    let container = document.getElementById(containerId);
    if (container.style.display === 'none' || container.style.display === '') {
        container.style.display = 'block';
    } else {
        container.style.display = 'none';
    }
}

解释

  1. HTML 部分:

    • #tools-container 的初始 display 样式设置为 none,这样它在一开始是隐藏的。
  2. JavaScript 部分:

    • 获取 #tools-container 元素。
    • 检查 container.style.display 的值,如果它是 none 或空字符串(初始状态),则将其设置为 block 以显示内容。
    • 如果 container.style.displayblock,则将其设置为 none 以隐藏内容。

这样,点击一次即可正确显示或隐藏内容。

标签:style,container,javascript,none,点击,html,display,card
From: https://www.cnblogs.com/aiparallelworld/p/18331137

相关文章

  • 前端开发技术之HTML/CSS
    前端开发技术        HTML/CSS                HTML(HyperTextMarkupLanguage)是一种用于创建网页的标准标记语言。基本标签        1.<div>:定义文档中的一个分区或节,常用于页面布局和样式化。 <div>这是一个分区</div>      ......
  • 自学JavaScript(放假在家自学第一天)
    目录 JavaScript介绍分为以下几点1.1JavaScript是什么1.2JavaScript书写位置1.3Javascript注释1.4Javascript结束符1.5Javascript输入输出语法JavaScript(是什么?)是一种运行在客户端(浏览器)的编程语言,实现人机交互效果。2.作用(做什么?)网页特效(监听用户的......
  • html+css+js作业王者荣耀1个页面西施(带js)
    html+css+js作业王者荣耀1个页面西施(带js)下载地址https://download.csdn.net/download/qq_42431718/89595507目录1目录2项目视频html+css+js作业王者荣耀1个页面西施带js页面1......
  • vb6.0版本鼠标点击移动操作程序代码
    'sleep函数PrivateDeclareSubSleepLib“kernel32”(ByValdwMillisecondsAsLong)'获取鼠标坐标PrivateTypePOINTAPIXAsLongYAsLongEndTypePrivateDeclareFunctionGetCursorPosLib“user32”(lpPointAsPOINTAPI)AsLong'移动鼠标PrivateDe......
  • JavaScript入门速称
    菜鸟教程:JavaScript教程|菜鸟教程(runoob.com) 对象操作1.对象增删改查1.1创建对象letobj={}1.2新增属性obj.a=11.3修改属性obj.a='a'1.4查询属性obj.a|1.5删除属性deleteobj.a2.其他操作2.1obj[a]=12.2Object.assign()2.3let{name......
  • javascript中的symbol
    symbol的使用功能类似于一种标志唯一性的ID理解唯一性<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><script>lets1=Symbol()lets......
  • javascript(一)
    一、基本语法1.位置(1)JavaScript脚本必须位于<script>与</script>之间(2)<script>标签可以位于<body>或者<head>部分中2.输出语句(1)window.alter()弹出警告框(2)document.write()可以将内容在网页中打印出来,同时也会将原有的内容覆盖(3)console.log()可以将内容在......
  • JavaScript图片轮播
    代码在文章最后面(含图片URL)实现功能按向左按钮图片显示上一张按向右按钮图片显示下一张每隔2000毫秒显示下一张图底部三个圆点显示当前的图片的编号实现流程初始化图片数组创建一个包含图片URL的数组,轮播时会通过这个数组来切换图片。创建当前索引变量 这个变量用来追踪......
  • django学习入门系列之第五点《javascript的条件语句和函数》
    文章目录5.6条件语句5.7函数往期回顾5.6条件语句if(){}elseif(){}5.7函数#python中函数定义的格式deffunc{函数的内容}#使用函数func()//javascript函数中的内容functionfunc(){函数的内容}//使用函数func()往......
  • web期末作业设计网页/web前端开发期末大作业/html css网页制作成品(第51-60套/总计100
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......