到目前为止,我对 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(使用前将#替换为@)