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);
};