预备知识:事件传播模型
事件在 HTML 中按照传播方式分为三个阶段:
- 事件捕获阶段:事件从根节点自上而下向目标节点传播;
- 目标阶段:事件到达目标节点,触发目标节点的事件处理程序;
- 事件冒泡阶段:事件从目标节点自下而上向根节点传播。
preventDefault() 方法
在 HTML 中,当事件被触发时,它默认会按照事件传播模型执行,这可能会产生某些意想不到的结果,如在 form 表单提交时,我们需要对 form 表单中输入内容进行验证,但是在提交时会刷新页面导致输入框内容丢失。这种时候,我们可以使用 preventDefault()
方法阻止默认行为的执行。preventDefault()
方法可以在 event
对象中被调用,它的作用是取消当前事件的默认行为。
preventDefault() 方法的使用方法
event.preventDefault()
注:event
指代触发事件的 event
对象。
示例一:
HTML 代码:
<a href="https://www.baidu.com" id="link">百度一下,你就知道</a>
JavaScript 代码:
document.getElementById('link').addEventListener('click', function(event) {
event.preventDefault();
console.log('已经阻止了默认行为');
});
在上面的代码中,当用户点击 a 标签时,会触发 click
事件,由于使用了 event.preventDefault()
方法,程序会执行默认的 console.log()
方法,并且不会跳转到百度网站。
示例二:
HTML 代码:
<form>
<input type="text" id="input">
<br>
<button type="submit">提交</button>
</form>
JavaScript 代码:
document.querySelector('form').addEventListener('submit', function(event) {
event.preventDefault();
if (document.getElementById('input').value == '') {
alert('输入框不能为空');
} else {
alert('输入框已经填写');
}
});
在上面的代码中,当用户点击提交按钮时,会触发 submit
事件,由于使用了 event.preventDefault()
方法,程序不会进行表单提交,而是进行表单验证,如果输入框为空,弹出提示框提醒用户未输入,否则提示用户输入框已经填写。
总结
preventDefault()
方法可以防止默认的事件行为执行,比如在 form 表单提交时进行表单验证而不是提交表单到服务器。理解 JavaScript 事件传播模型可以更好的使用 preventDefault()
方法。