一个更强大的替代默认ngClick设计用于触摸屏设备。大多数移动浏览器在点击和发布后等待大约300 Most才发送点击事件。此版本将立即处理它们,然后防止以下单击事件传播。
这会造成不一致的行为,因为在计算机上,单击事件继续冒泡/传播,但在移动上,它停止。这意味着dom中较高的侦听元素单击的任何指令都会失败。对我来说,这似乎是个小问题,但我不应该是第一个去解决这个问题的人。
如果你看看ngTouch代码,问题源于第453行。
element.triggerHandler('click', [event]);
angular.element委托到jQuery的内置子集,称为"jQuery lite“或”jqLite“。
jqLite可以访问jQuery的triggerHandler,但不能访问trigger。
.triggerHandler()方法的行为与.trigger()类似,但有以下例外:
因此,需要将trigger支持添加到jqLite中,并将该行更改为trigger以使其正常工作。
同时,我该如何解决这个问题呢?在自定义指令中有使用ngClick的方法吗?
笑的奖金:来自ngTouch源代码的注释
// This is an ugly, terrible hack!
// Yeah, tell me about it.发布于 2014-11-03 04:09:21
我已经把第453行换成
element[0].dispatchEvent(new MouseEvent('click', event));它现在正在按预期工作。不确定new MouseEvent()的浏览器兼容性是什么样子的,所以如果是的话,可以随意评论。
发布于 2015-12-01 00:37:43
除了上面的解决方案之外,我还必须向我的每个锚添加ng-click="“才能完成这项工作。
注意:我宁愿把这写成评论,但是堆栈溢出不觉得我赢得了权利。抱歉的。
发布于 2016-04-12 14:37:36
较新版本的ngTouch 1.5.3+应该不再有此问题。请参阅https://github.com/angular/angular.js/commit/0dfc1dfebf26af7f951f301c4e3848ac46f05d7f
它是ngTocuh代码的副产品,旨在克服300 to的移动浏览器延迟问题。有关这方面的更多信息,请参见http://developer.telerik.com/featured/300-ms-click-delay-ios-8/。
https://stackoverflow.com/questions/26685498
复制相似问题