ng-focus 发射两次而 ng-blur 从不发射

2024-05-03

到目前为止,我对 Angular 已经有了相当的经验,但这似乎是在较低级别上发生的 DOM 事件传播方式的事情。由于某种原因,在我的申请的一部分中,我有ng-focus and ng-blur一样的input,但是ng-focus事件触发两次并且ng-blur从不火灾。

<input type="text" ng-focus="doFocus()" ng-blur="doBlur()" />

然后在我的控制器中

$scope.doFocus = function(){
    console.log('focus');
}

$scope.doBlur = function(){
    console.log('blur');
 }

当我检查我的控制台时,我看到 2 个“焦点”并且没有“模糊”消息...我已经在网站的其他部分测试了这一点,并且它在其他一些部分也有效。我的猜测是它与 DOM 有关,但我什至尝试过基本上提取页面上的所有内容,除了input它仍然无法正常工作。有谁知道这可能是什么原因造成的?

UPDATE

经过更多调试后,我注意到 focus 事件在浏览器范围内触发一次,但该事件在 AngularJS 世界中触发两次。我使用 Chrome 开发工具在所有 Focus 事件上设置了一个断点,它只会命中一次,但是如果我记录 Angular$event在控制台中,我可以看到具有相同时间戳的完全相同的 $event 在 Angular 中被触发两次。


好吧..所以这有点奇怪。在我自己找不到解决方案后,我让一位同事尝试在他的机器上重现我的问题。当然,这对他来说效果很好......这让我认为这是我的 Chrome,所以我卸载并重新安装了一个新的 Chrome 实例,现在一切都很好......不知道我的 Chrome 发生了什么导致 DOM 事件变得混乱,但至少我弄清楚了。

希望这对将来可能遇到此问题的任何人有所帮助。

UPDATE

我意识到问题出在 Chrome 扩展上:AngularJS Batarang

这个插件扰乱了我的 DOM 事件并导致它们无法正确触发。我从 Chrome 中删除了扩展程序,一切都开始工作了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ng-focus 发射两次而 ng-blur 从不发射 的相关文章

随机推荐