此文章主要作用是记录看到的琐碎知识
事件模型图
常用的监听事件addEventLister
btn.addEventListener = ('click', function(){}, false)
btn.addEventListener = ('click', function(){}, true)
addEventListener(事件名,回调函数,布尔值),第三个参数是来指定事件是否在捕获阶段或冒泡阶段执行(默认为false
,在冒泡阶段执行事件的回调函数)。
事件委托(事件代理)
事件委托又叫事件代理:利用事件冒泡模型,不监听子节点,而去监听其父节点,由父节点监听函数统一处理多个子节点的事件。
<body>
<div id="div">
<button>点击</button>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</div>
<script>
function on(eventType, element, selector, fn) {
if (!(element instanceof Element)) {
element = document.querySelector(element)
}
element.addEventListener(eventType, (e) => {
const t = e.target
if (t.matches(selector)) {
fn(e)
}
})
}
on('click', '#div', 'button', () => {
console.log('button被点击了')
})
let ul = document.querySelector('ul')
ul.addEventListener('click', function (e) {
let tagName = e.target.tagName.toLowerCase()
if (tagName === 'li') {
//some code
console.log('li被点击了')
}
})
</script>
</body>
参考: