首页 > 解决方案 > 如何在 Angular 1.x 链接函数中获取元素的其他事件处理程序

问题描述

我正在处理 angular 中的两个属性,它们处理输入元素的 Enter 按键事件和 Blur 事件,它们都调用范围的相同方法:

<input type="number" ng-enter="doSomeThing()" ng-blur="doSomething()" />

此设置的问题在于 Enter 按键事件几乎同时触发了 Blur 事件,因此这导致服务器上的 EF 并发错误。所以为了解决这个问题,我不得不这样做,所以该方法只被调用一次。顺便说一句,ngEnter 是一个自定义指令:

myApp.directive('ngEnter', function () {

    function link(scope, element, attrs) {
        element.bind("keypress", function (event) {
            if (event.which === 13) {
                scope.$apply(function () {
                    scope.$eval(attrs.ngEnter);
                });
                event.preventDefault();
            }
        });
    };

    link.$inject = ["scope", "element", "attrs"];

    return {
        link: link
    }

});

我可以通过调用内部按键函数来取消模糊事件,element.off('blur')如下所示:

if (attrs.ngBlur && attrs.ngBlur == attrs.ngEnter) {
    element.off('blur');
}

但现在的问题是元素中的模糊处理程序消失了,所以我不得不将处理程序重新绑定到模糊事件,但元素没有事件列表。我试过jQuery._data(element, "events" );但它没有返回任何东西,即使元素data没有定义。element.off('blur')工作所以处理程序必须在某个地方但是我应该在哪里或如何访问这些处理程序?与 Jquery 相比,Angular 存储这些处理程序的方式是否不同?

标签: jqueryangularjsevent-handling

解决方案


推荐阅读