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”方法绑定的侦听器吗?