【发布时间】:2020-07-25 17:41:25
【问题描述】:
我正在尝试通过单击外部模式来关闭它。它在 codepen 上的笔内工作正常,但在 codepen 项目或本地文件中却不行。我错过了什么?
我的 HTML 文件中的标头代码是:
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script type="text/javascript" src="script.js"></script>
<title></title>
</head>
不确定是否需要导入 jQuery,但我在此处阅读的有关此主题的大多数答案都指示添加它。有无结果都一样。
而我的整个 js 文件只是:
var modal = document.getElementById('id01');
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
我也试过把js直接放在HTML文件的script标签里,也没有运行。
<script type="text/javascript">
var modal = document.getElementById('id01');
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
}
</script>
【问题讨论】:
-
在body标签结束前添加脚本而不是head标签。
-
不在本地工作?然后检查控制台是否有错误
-
控制台显示没有错误,改变脚本是在正文还是头部没有区别
-
可能
modal是null,因为您在HTML 文件中实际<div id="id01">元素之前的某个位置调用document.getElementById('id01'),因此当您尝试引用它时它还不存在.你确定你把它放在身体的结束,而不是开始吗?请在onclick函数中设置断点并单步执行代码并检查modal和event.target的值以查看发生了什么。实际上,我感觉好像你需要相反的东西 -if (event.target !== modal)- 另外,如果用户在子元素上单击模态内部的某个地方怎么办? -
把它放在body标签的底部是有效的!非常感谢!我不确定如何将其标记为已回答,因为这是评论而不是答案。
标签: javascript html