javascript - getElementById(...).onclick 没有响应
问题描述
我正在尝试显示一个可以打开和关闭的侧边栏,我在顶部有一个导航栏,其中包含一个带有 id="toggle" 的标签,我为其添加了一个 eventListener (它等待 HTML 之前加载运行 javascript 代码)和一个应该折叠/展开侧边菜单的相应函数。但是,当我尝试运行代码时,什么也没有发生。任何帮助都会很棒!
这是我的 HTML:
<html>
<head>
<title>Home</title>
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='main.css') }}"/>
<script type="text/javascript" src="{{ url_for('static', filename='index.js') }}"></script>
</head>
<body>
<!-- navbar -->
<div id="navbar">
<a href="" id="toggle">☰ Menu</a>
<a href="">Forget me</a>
</div>
<!-- sidebar -->
<div id="mySidenav" class="sidenav">
<a href="">About</a>
{% for room in chatroom %}
<a href="">{{ room }}</a>
{% endfor %}
</div>
<body>
</html>
以及位于“静态”文件夹中的 js 文件:
document.addEventListener("DOMContentLoaded", function() {
document.getElementById("toggle").onclick = function() {
var sidebar = document.getElementById("mySidenav");
if (sidebar.style.width === "250px") {
sidebar.style.width = "0";
} else {
sidebar.style.width = "250px";
}
};
});
解决方案
我在没有测试任何代码的情况下看到了两个问题:
- 您的结束正文标签必须是
</body>
, 和; - 该
toggle
链接将离开页面,您需要防止这种情况发生。您可以通过将toggle
元素更改为 abutton type="button"
或添加preventDefault()
到您的点击处理程序 Javascript 来做到这一点。
推荐阅读
- string - 在不相关的表之间搜索字符串
- sql - 尝试用一个 ID 将多行合并在一列中
- visual-studio - 无法从另一个分布式作业中启动 IncrediBuild 分布式作业
- javascript - BigQuery 与“签名网址”的相似性
- jquery - 使用 javascript 设置 CSS 行为不流畅
- sql-server - 为 snap、crackle、pop 创建一个函数
- python - 如何用 pandas 检测上升和下降趋势?
- python - 划分数据框列:TypeError:'int'对象不可迭代
- node.js - 在 EJS 页面上从 mongoDB 访问数据
- javascript - PHP Scraping Javascript var