Javascript 如何侦听其他元素上的事件

Javascript 如何侦听其他元素上的事件,javascript,Javascript,(我昨天问了一个类似的问题,但问题又转向了另一个方向,所以再次发布更多细节) 我有一个类/对象,它接受html元素的ID,然后在该元素上设置事件处理程序 like: batman.on("click",run_this_code()); 其结果显然是在触发元素单击事件时运行func/代码 现在,我的问题是:如何收听/观看其他元素事件? 假设蝙蝠侠是一个机器人,超人是一个文本场 如上所述,我有一个类的实例,用于按钮“蝙蝠侠”。 在那种情况下,我该如何倾听《超人》中的事件呢。 伪代码: batma

(我昨天问了一个类似的问题,但问题又转向了另一个方向,所以再次发布更多细节)

我有一个类/对象,它接受html元素的ID,然后在该元素上设置事件处理程序

like: batman.on("click",run_this_code());
其结果显然是在触发元素单击事件时运行func/代码

现在,我的问题是:如何收听/观看其他元素事件? 假设蝙蝠侠是一个机器人,超人是一个文本场 如上所述,我有一个类的实例,用于按钮“蝙蝠侠”。 在那种情况下,我该如何倾听《超人》中的事件呢。 伪代码:

batman.listen("click","fired on element with ID superman",run_this_code());
我想到的唯一一件事,我不知道100%怎么做,就是注册所有对文档的点击,包括:

var arr;
document.addEventListener('click', function (event) {
    if (!event.target.hasAttribute('track_me')) return;
    // code here that saves the click, and the ID, into an array (arr)
}, false);
现在,其他实例可以以某种方式检查阵列(arr)上的更改,并做出相应的反应

好了,说得够多了,基本上我该怎么做:

batman.listen("click","on_superman",function(){
    alert("this instance represents the 'batman' element, but the element 'superman' was just clicked.");
}
);
我不想在“超人”实例中编写代码。这只是一个例子,我想成为我的类的通用函数,监听其他实例上的事件

假设
batman
是一个
superman
是一个文本字段
,我有一个我的类的实例,如上所述,用于按钮“batman”。在那种情况下,我该如何收听“超人”节目

您可以获得对超人元素的引用,如下所示:

document.getElementById("superman")
$("#superman")
或者,如果您正在使用jQuery,您可以得到一个包含该元素的jQuery对象,如下所示:

document.getElementById("superman")
$("#superman")
然后使用
addEventListener
(在元素上)或
上的
(在jQuery对象上)侦听
单击事件

document.getElementById("superman").addEventListener("click", function() {
    // superman clicked
});

执行此操作的代码可以在您想要的任何类或对象方法中


你在评论中说:

我的目标是拥有一个对任何其他元素事件做出反应的功能

您可能正在寻找事件委派:大多数事件都会冒泡,因此您可以将事件侦听器放在某个容器上(
document
本身,如果您愿意),并观察事件的发生。触发事件的元素作为处理程序接收的事件对象的
target
属性提供:

document.addEventListener("click", function(e) {
    // Use `e.target` here...
});
例如:

document.addEventListener(“单击”),函数(e){
console.log(e.target.id+“单击”);
});
文件.附录列表器(“输入”,功能(e){
console.log(e.target.id+“输入:”+e.target.value);
});

假设
batman
是一个
superman
是一个文本字段
,我有一个我的类的实例,如上所述,用于按钮“batman”。在那种情况下,我该如何收听“超人”节目

您可以获得对超人元素的引用,如下所示:

document.getElementById("superman")
$("#superman")
或者,如果您正在使用jQuery,您可以得到一个包含该元素的jQuery对象,如下所示:

document.getElementById("superman")
$("#superman")
然后使用
addEventListener
(在元素上)或
上的
(在jQuery对象上)侦听
单击事件

document.getElementById("superman").addEventListener("click", function() {
    // superman clicked
});

执行此操作的代码可以在您想要的任何类或对象方法中


你在评论中说:

我的目标是拥有一个对任何其他元素事件做出反应的功能

您可能正在寻找事件委派:大多数事件都会冒泡,因此您可以将事件侦听器放在某个容器上(
document
本身,如果您愿意),并观察事件的发生。触发事件的元素作为处理程序接收的事件对象的
target
属性提供:

document.addEventListener("click", function(e) {
    // Use `e.target` here...
});
例如:

document.addEventListener(“单击”),函数(e){
console.log(e.target.id+“单击”);
});
文件.附录列表器(“输入”,功能(e){
console.log(e.target.id+“输入:”+e.target.value);
});


“其结果显然是在触发元素单击事件时运行func/code。”与您显示的代码不同,它不会。它将立即运行
run\u this\u code
,然后在
上调用
以设置处理程序时使用其返回值。是否使用jQuery?我这样问是因为那些
.on
调用看起来像jQuery,但您没有标记。上面的代码更多是伪代码,我得到的实际类更多,并且按照我所描述的工作。但是你是对的:)不,我没有使用jquerybut是的,它的灵感来自于此。“其结果显然是在触发元素单击事件时运行func/代码。”与你显示的代码不同,它不会。它将立即运行
run\u this\u code
,然后在
上调用
以设置处理程序时使用其返回值。是否使用jQuery?我这样问是因为那些
.on
调用看起来像jQuery,但您没有标记。上面的代码更多是伪代码,我得到的实际类更多,并且按照我所描述的工作。但是你是对的:)不,我没有使用jquery,但是是的,它的灵感来源于此。我没有使用jquery。解决方案可能涉及某种变异观察员或代理。我不想在任何ID中硬编码,我的目标是拥有一个对任何其他元素事件作出反应的函数。@Jason-您可能正在寻找事件委派,我已添加到答案的末尾。是的,但我想我必须在文档上创建自己的事件,并在对象上侦听它。即使我没有使用jquery,也无法获得定制的分派。解决方案可能涉及某种变异观察员或代理。我不想在任何ID中硬编码,我的目标是拥有一个对任何其他元素事件作出反应的函数。@Jason-您可能正在寻找事件委派,我已添加到答案的末尾。是的,但我想我必须在文档上创建自己的事件,并在对象上侦听它。即使去上班也不能得到海关的派遣