Angularjs 检查一个元素是否已经有侦听器
如何检查特定事件侦听器是否已绑定到元素?例如:Angularjs 检查一个元素是否已经有侦听器,angularjs,directive,event-listener,Angularjs,Directive,Event Listener,如何检查特定事件侦听器是否已绑定到元素?例如: myApp.directive("myDirective", function ($document) { return { restrict: "A", scope: {}, link: function (scope, elem, attrs) { var myListener = function () { alert("Hello
myApp.directive("myDirective", function ($document) {
return {
restrict: "A",
scope: {},
link: function (scope, elem, attrs) {
var myListener = function () {
alert("Hello!!!");
};
elem.on("click", function () {
if (!$document.hasEvent("click", myListener)) { // Check in here
$document.on("click", myListener);
}
});
}
}
});
hasEvent
功能应该如何运行?提前感谢您的帮助…您需要一个数组来存储事件,还需要一个函数来检查给定的键是否有事件,如下所示:
var myEvents = [];
function hasEvent(key) {
return myEvents.indexOf(key) >= 0;
}
然后,无论何时尝试链接一个元素
,都需要检查它是否已经有一个事件。如果是这样,什么也不做。否则,存储其键
,并创建其事件。此外,无论何时链接到元素,都需要为元素生成唯一的键。我不能告诉你更多关于这方面的信息,因为你没有指定elem的可能值
myApp.directive("myDirective", function ($document) {
return {
restrict: "A",
scope: {},
link: function (scope, elem, attrs, elemKey) {
var myListener = function () {
alert("Hello!!!");
};
if (hasEvent.elemKey) {
return;
}
myEvents[myEvents.length] = elemKey;
elem.on("click", function () {
if (!$document.hasEvent("click", myListener)) { // Check in here
$document.on("click", myListener);
}
});
}
}
});
您可以将支票更改为:
if (!$document[0].onclick) { // Check in here
$document[0].onclick = myListener;
}
下面是JSFIDLE:Downvoter,您能说明我的答案有什么问题吗?如果您是对的,我可以改进/删除答案?因为为每个元素记录一个键没有多大意义,并且它不适用于多个事件类型。它不喜欢我的“hasEvent”函数。几乎与这个问题无关。这就是为什么要投否决票。但感谢您的尝试…谁说它必须是每个元素的键?如果elem描述了许多元素,那么您可以为此生成一个键。我没有特意定义这个功能,因为它可以根据需求来完成。这是一把钥匙,不是身份证,朋友:)我可以处理,谢谢。但是,难道没有一种方法可以查看通过“bind”或“on”方法绑定的侦听器吗?