/**
* lisen
* @param {string[]} ids
* @param {boolean} isCatch
*/
const lisen = (ids, isCatch) =>
ids.forEach(id =>
document
.getElementById(id)
.addEventListener("click", () => alert(id), isCatch)
)
// BubbleEvent
lisen(["root_b", "first_b", "second_b", "target_b"], false)
// CatchEvent
lisen(["root_c", "first_c", "second_c", "target_c"], true)
关于 addEventListener 的第三个参数 options 如果是 boolean 值,则 false 为冒泡事件,true 为捕获事件,默认为冒泡 如果是一个对象,即一个指定有关 listener 属性的可选参数对象。可用的选项如下:
capture: Boolean,表示 listener 会在该类型的事件捕获阶段传播到该 EventTarget 时触发。
once: Boolean,表示 listener 在添加之后最多只调用一次。如果是 true, listener 会在其被调用之后自动移除。
passive: Boolean,设置为 true 时,表示 listener 永远不会调用 preventDefault()。如果 listener 仍然调用了这个函数,客户端将会忽略它并抛出一个控制台警告。如果一个事件不需要 preventDefault,直接设置 passive true 可以起到优化作用。