在Angular.js中从焦点事件中单独单击事件

时间:2015-06-12 14:13:36

标签: javascript angularjs javascript-events

我想在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(),但这些解决方案也无效。

1 个答案:

答案 0 :(得分:0)

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

无论如何,你可以提供一个小提琴来说明究竟发生了什么?