我想在ng-focus
回调中添加一个点击处理程序,以便开始收听所有未来的点击事件。但是,当通过单击启动焦点时,单击处理程序也会立即触发。我可以使用$timeout
解决问题,但这是一个黑客攻击,它违背了我所代表的一切。我变成了什么?!
我的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')
};
我希望以下工作正常,但问题是点击回调会立即触发。正如您所料,如果我 tab 到此字段,则不会调用单击回调。但是,如果点击触发焦点事件,则会调用hideHistory
。
scope.inputFocus = function (e) {
scope.displayHistory = true;
$document.on('click', hideHistory);
};
我尝试拨打e.stopPropagation()
和e.stopImmediatePropagation()
,但这些解决方案也无效。
答案 0 :(得分:0)
您是否尝试过e.preventDefault();
?
无论如何,你可以提供一个小提琴来说明究竟发生了什么?