检查元素是否已经是侦听器

时间:2014-06-30 12:17:57

标签: angularjs directive event-listener

如何检查某个特定事件监听器是否已绑定到该元素?例如:

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功能如何?提前感谢您的帮助......

2 个答案:

答案 0 :(得分:1)

您可以将支票更改为:

if (!$document[0].onclick) { // Check in here
    $document[0].onclick = myListener;
}

这是jsFiddle:http://jsfiddle.net/7mRQW/

答案 1 :(得分:-2)

您需要一个数组来存储您的事件和一个函数来检查给定的key是否有事件,如下所示:

var myEvents = [];

function hasEvent(key) {
    return myEvents.indexOf(key) >= 0;
}

然后,当您尝试link elem时,您需要检查它是否已有事件。如果是这样,什么也不做。否则,存储其key并创建其事件。此外,只要elem link,就需要为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); } }); } } }); 生成唯一键。我无法告诉你更多有关这方面的信息,因为你没有说明elem的可能值。

{{1}}