Javascript 如何侦听其他元素上的事件
(我昨天问了一个类似的问题,但问题又转向了另一个方向,所以再次发布更多细节) 我有一个类/对象,它接受html元素的ID,然后在该元素上设置事件处理程序Javascript 如何侦听其他元素上的事件,javascript,Javascript,(我昨天问了一个类似的问题,但问题又转向了另一个方向,所以再次发布更多细节) 我有一个类/对象,它接受html元素的ID,然后在该元素上设置事件处理程序 like: batman.on("click",run_this_code()); 其结果显然是在触发元素单击事件时运行func/代码 现在,我的问题是:如何收听/观看其他元素事件? 假设蝙蝠侠是一个机器人,超人是一个文本场 如上所述,我有一个类的实例,用于按钮“蝙蝠侠”。 在那种情况下,我该如何倾听《超人》中的事件呢。 伪代码: batma
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-您可能正在寻找事件委派,我已添加到答案的末尾。是的,但我想我必须在文档上创建自己的事件,并在对象上侦听它。即使去上班也不能得到海关的派遣