Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将Angular.js中的单击事件与焦点事件分开_Javascript_Angularjs_Javascript Events - Fatal编程技术网

Javascript 将Angular.js中的单击事件与焦点事件分开

Javascript 将Angular.js中的单击事件与焦点事件分开,javascript,angularjs,javascript-events,Javascript,Angularjs,Javascript Events,我想在ng focus回调中添加一个click处理程序,开始监听所有未来的click事件。但是,当通过单击启动焦点时,单击处理程序也会立即启动。我可以用$timeout来解决这个问题,但这是一个黑客行为,它违背了我所主张的一切。我变成什么了 我的HTML: <input type="text" name="q" ng-focus="inputFocus($event)" /> 我希望下面的操作能够正常工作,但问题是click回调会立即启动。正如您所预料的,如果我将选项卡指向此字段,

我想在
ng focus
回调中添加一个click处理程序,开始监听所有未来的click事件。但是,当通过单击启动焦点时,单击处理程序也会立即启动。我可以用
$timeout
来解决这个问题,但这是一个黑客行为,它违背了我所主张的一切。我变成什么了

我的HTML:

<input type="text" name="q" ng-focus="inputFocus($event)" />
我希望下面的操作能够正常工作,但问题是click回调会立即启动。正如您所预料的,如果我将选项卡指向此字段,则不会调用click回调。但是,如果焦点事件是由单击触发的,则调用
隐藏历史

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

我试着调用
e.stopPropagation()
e.stoppimediatepropagation()
,但这些解决方案也没有效果。

你试过
e.preventDefault()


无论如何,您可以提供一个fiddle来准确说明发生了什么?

在单击函数中设置一个布尔值来检查是否触发了焦点,然后仅在焦点等于true时运行单击函数。很抱歉,由于公司的政策,无法提供fiddle。也许可以检查此项
scope.inputFocus = function (e) {
    scope.displayHistory = true;
    $document.on('click', hideHistory);
};