其他元素上的Javascript事件

其他元素上的Javascript事件,javascript,Javascript,在一个元素上,是否可以“订阅”或侦听另一个元素上的事件 我已经在谷歌上搜索过了,但是运气不好。我知道不存在这样的事件,但是否有一些聪明的黑客或工作可能 伪代码是: elementA.addEventListener("click on elementB", myScript); 编辑: 断然的。各位,我想我没有解释清楚。方法是使用代理对象。据我所知,您可以尝试以下方法: elementA.onclick = () =>{ console.log('elementA clicked

在一个元素上,是否可以“订阅”或侦听另一个元素上的事件

我已经在谷歌上搜索过了,但是运气不好。我知道不存在这样的事件,但是否有一些聪明的黑客或工作可能

伪代码是:

elementA.addEventListener("click on elementB", myScript);
编辑:
断然的。各位,我想我没有解释清楚。方法是使用代理对象。

据我所知,您可以尝试以下方法:

elementA.onclick = () =>{
    console.log('elementA clicked');
}

elementB.onclick = () => {
    elementA.click();
}
或者使用
元素相应地修改它。on()

elementA.addEventListener('click', () => {
    console.log('elementA clicked')
})

elementB.addEventListener('click', () => {
    elementA.click()
})

假设您有元素A,并且希望处理程序函数在处理程序对元素B激发时能够访问该元素。有几种方法可以实现此目的:

const elemB = document.querySelector('#B');
elemB.addEventListener('click', evt => {
  const elemA = document.querySelector('#A');
  // do something with elemA
});
如果elemA是动态创建/销毁的,这是一个正常的解决方案。如果A将长期存在,则是更好的解决方案:

const elemA = document.querySelector('#A');
const handlerFactory = a => evt => {
  // do stuff with a
};
elemB.addEventListener('click', handlerFactory(elemA));

现在,处理程序逻辑可以与多个元素和/或多个事件类型一起重用。

一个事件沿着元素的层次结构向下移动,到达目标,然后冒泡到页面的根,因此您可以在例如容器上侦听事件。文档/窗口可以监听其中发生的一切。如果ElementA和ElementB根本没有任何层次结构的关联,那么这可能不是一个好的模式,您可能不需要添加这种侦听器。您的用例实际上是什么?为什么不监听elementB上的点击,然后在其中执行myScript呢<代码>元素B.addEventListener(“单击”,myScript)这是可能的,但我不明白为什么需要这样做。我假设OP希望在B上的处理程序中引用a。这是我想要的,但我希望侦听/订阅元素B上的事件,而不必每次自己硬编码。