Javascript MouseeEvent的目标是否始终是元素?
Visual Studio代码显示目标变量的类型为以下TypeScript代码中的类型:Javascript MouseeEvent的目标是否始终是元素?,javascript,typescript,visual-studio-code,Javascript,Typescript,Visual Studio Code,Visual Studio代码显示目标变量的类型为以下TypeScript代码中的类型: document.addEventListener('click', (event) => { let target = event.target }) 为什么它不被标记为一个?可以或也是MouseeEvent的目标? 我使用以下HTML代码在web浏览器窗口中单击,但无法获取除元素之外的EventTarget类型 <!DOCTYPE html> <html> <h
document.addEventListener('click', (event) => {
let target = event.target
})
为什么它不被标记为一个?可以或也是MouseeEvent的目标?
我使用以下HTML代码在web浏览器窗口中单击,但无法获取除元素之外的EventTarget类型
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script>
document.addEventListener('click', (event) => {
let target = event.target
console.log(target instanceof Element)
})
</script>
</head>
<body>
test
</body>
</html>
但现在我必须显式地将event.target强制转换为元素,以便对其调用matches()函数:
document.addEventListener('click', (event) => {
let target = <Element>event.target
if (target.matches('.carousel__control--prev'))
shiftCarouselLeft(target.closest('.carousel'))
})
document.addEventListener('click',(事件)=>{
让target=event.target
if(target.matches('.carousel__-control--prev'))
shiftCarouselLeft(目标最近('.carousel'))
})
任何EventTarget都可以是MouseeEvent事件的目标:
const foo=new EventTarget();
foo.addEventListener('单击',(evt)=>{
log('is'foo`',evt.target==foo);
log('is MouseEvent',MouseEvent的evt instanceof);
});
foo.dispatchEvent(新的MouseEvent('click'))
可以在整个文档
节点上获取鼠标事件,但不是所有事件。您可以获得Document
节点,例如mouseenter
和mouseleave
as(适用于Chrome,但不适用于Firefox或Safari)
从理论上讲,在文本节点上获取此类事件也是可能的,但恐怕没有浏览器能够做到这一点。这里有什么问题?@evolutionxbox:我一直在想VS代码或TypeScript是否可以更好地工作,正因为如此,我才可以避免强制转换:let target=event.target
document.addEventListener('click', (event) => {
let target = <Element>event.target
if (target.matches('.carousel__control--prev'))
shiftCarouselLeft(target.closest('.carousel'))
})