在事件中`event.stopPropagation()`、`event.preventDefault()`和`return false`之间该用哪一个?
当谈到在JavaScript中处理DOM事件时,我觉得我总是被一件事弄糊涂了。
我什么时候应该在事件对象上调用stopPropagation() ?什么时候应该在事件对象上调用preventDefault() ?应该return false ?
Event.stopPropagation
假设我想处理一个元素的点击事件。
默认情况下,DOM元素上的事件是在被点击的特定元素上触发的(例如,一个按钮),并且会传播到它的所有父元素树上,除非它被停止。
我想确保该事件在我的事件处理程序中被处理,并且它将在那里 "停止"。
你可以通过调用Event 对象的stopPropagation() 方法来停止传播,通常是在事件处理程序的最后。
const link = document.getElementById('my-link')
link.addEventListener('mousedown', event => {
// process the event
// ...
event.stopPropagation()
})
Event.preventDefault
调用事件对象的preventDefault() 方法将取消浏览器被设定为执行的默认处理。
例如,在一个a 元素click 事件上打开一个新页面。
或者在submit 事件上提交一个form 。
调用preventDefault() 是你需要做的,以完全定制动作。也许通过创建一个fetch 请求来加载一些JSON,而不是在点击链接时打开一个新页面。
在这个相同元素上定义的其他事件处理程序将执行。除非你调用event.stopImmediatePropagation() 。
返回false
这对以前(或现在)的jQuery开发人员来说尤其令人困惑。在jQuery中,从一个事件处理程序返回false ,会自动为我们调用Event.preventDefault 和Event.stopPropagation 。
在vanilla JavaScript中,return false 在一个事件处理程序中没有任何作用。