html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化
1.Django应用创建到启动的简单示例2.Django中型项目的目录结构和一个应用创建启动示例3.Ubungu+Django简单项目创建代码全4.Django+Vue构建前后端分离开发模式5.Django和MySQL与Vue项目之间的数据是如何流动实现交互响应的6.Django项目中关于静态文件的引用7.Django+nginx+静态网站8.Django项目中Ajax的应用,博客分类文章阅读,左右栏目自动更新9.Ajax代码运行前应该先加载jQuery10.关于css选择器和样式表的应用11.Django项目中使用markdown语法12.关于静态文件目录与模板引用和Nginx location块的适配设置
13.html中javascript点击事件后显示或隐藏某些元素时需要点击两次才生效的原因分析和优化
14.Flask与Django返回json数据的等价方法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';
}
}
解释
-
HTML 部分:
- 将
#tools-container
的初始display
样式设置为none
,这样它在一开始是隐藏的。
- 将
-
JavaScript 部分:
- 获取
#tools-container
元素。 - 检查
container.style.display
的值,如果它是none
或空字符串(初始状态),则将其设置为block
以显示内容。 - 如果
container.style.display
是block
,则将其设置为none
以隐藏内容。
- 获取
这样,点击一次即可正确显示或隐藏内容。
合集:
Python Web
标签:
django项目示例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异