繁体   English   中英

在Angular.js中将点击事件与焦点事件分开

[英]separate click event from focus event in Angular.js

我想向ng-focus回调添加点击处理程序,以开始侦听所有将来的点击事件。 但是,当通过单击启动焦点时,单击处理程序也会立即触发。 我可以用$timeout解决问题,但这是一个hack,它违背了我所代表的一切。 我变成了什么?

我的HTML:

<input type="text" name="q" ng-focus="inputFocus($event)" />

这个.js 可以工作 (这在指令的链接函数内部):

scope.inputFocus = function (e) {
    scope.displayHistory = true;
    $timeout(function () {
        $document.on('click', hideHistory);
    }, 200)
};

function hideHistory() {
    scope.displayHistory = false;
    scope.$digest();
    $document.off('click')
};

我希望执行以下操作,但是问题是click回调会立即触发。 如您所料,如果我跳至该字段,则不会调用click回调。 但是,如果焦点事件是通过单击触发的, hideHistory调用hideHistory

scope.inputFocus = function (e) {
    scope.displayHistory = true;
    $document.on('click', hideHistory);
};

我尝试调用e.stopPropagation()e.stopImmediatePropagation()但这些解决方案均无效。

您是否尝试过e.preventDefault();

无论如何,您可以提供一个小提琴来确切说明正在发生的事情?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM