代码
// 在网页加载完成后运行代码
document.addEventListener("DOMContentLoaded", () => {
// 监听按键按下事件
document.addEventListener("keydown", (event) => {
// 判断按下的键是否为Ctrl键和P键
if (event.ctrlKey && event.key === "p") {
// 阻止事件默认行为(打印页面)
event.preventDefault();
// 可以选择在这里添加自己的提示或处理逻辑
console.log("ctrl + p 已被阻止");
}
});
});
addEventListener
w3school
定义
addEventListener()
方法将事件处理程序附加到元素。
参数 描述 type 必需。事件的名称。
请不要使用 "on" 前缀。
请使用 "click" 而不是 "onclick"。
function 必需。事件发生时运行的函数。 useCapture 可选(default = false)。
false
- 处理程序在冒泡阶段执行。true
- 处理程序在捕获阶段执行。
技术细节
该方法将把指定的事件监听器函数添加到当前节点的监听器集合中,以处理指定类型
type
的事件。如果useCapture
为true
,则监听器被注册为捕捉事件监听器。如果useCapture
为false
,它被注册为普通事件监听器。
addEventListener()
可能被调用多次,在同一个节点上为同一种类型的事件注册多个事件句柄。但要注意,DOM
不能确定多个事件句柄被调用的顺序。
如果一个事件监听器函数在同一个节点上用相同的type
和useCapture
参数注册了两次,那么第二次注册将被忽略。如果正在处理一个节点上的事件时,在这个节点上注册了一个新的事件监听器,则不会为那个事件调用新的事件监听器。
当用Node.cloneNode()方法或Document.importNode()方法复制一个Document
节点时,不会复制为原始节点注册的事件监听器。
这个方法也在Document和Window对象上定义了,而且工作方式类似。
DOMContentLoaded
MDN
当
HTML
文档完全解析,且所有延迟脚本(<script defer src=“…”>和<script type=“module”>)下载和执行完毕后,会触发DOMContentLoaded
事件。它不会等待图片、子框架和异步脚本等其他内容完成加载。
DOMContentLoaded
不会等待样式表加载,但延迟脚本会等待样式表,而且DOMContentLoaded
事件排在延迟脚本之后。此外,非延迟或异步的脚本(如<script>
)将等待已解析的样式表加载。
另一个事件load只能用于检测完全加载的页面。有一个常见的错误就是在DOMContentLoaded
事件更合适时使用了load
事件。
这个事件不可取消。
preventDefault
w3school
如果事件是可取消的,则
preventDefault()
方法会取消该事件,这意味着属于该事件的默认操作将不会发生。
举例,在以下情况下有用:
单击“提交”按钮,阻止其提交表单
单击链接,防止链接跟随URL
并非所有活动都可以取消。请使用cancelable属性来确定事件是否可取消。
preventDefault()
方法不会阻止事件通过DOM
进一步传播。请使用stopPropagation()
方法来解决。
MDN
Event接口的
preventDefault()
方法,告诉用户代理:如果此事件没有被显式处理,它默认的动作也不应该照常执行。此事件还是继续传播,除非碰到事件监听器调用stopPropagation()或stopImmediatePropagation(),才停止传播。