我的按钮处理程序被调用两次 - 一次用于mousedown / touchstart,第二次用于mouseup / touchend。
我的iPhone设备和Chrome浏览器都会出现这种情况。
使用ST 1.1
我没有找到任何关于这个问题的引用,似乎暗示我的环境中的某些内容是错误的,但我已经没有东西可以检查...
检查传递给Chrome DevTools中处理程序的事件对象我可以看到它们都是模拟的“tap”事件,第一个来自“mousedown”,第二个来自“mouseup”。
有什么想法吗?
修改
我发现当我向Ext.EventManager.onDocumentReady
添加一个调用(即使是空处理程序)时会发生这种情况。
如果我删除此电话,我只会按预期点击“mouseup”。
如果我用Ext.onReady
替换它就可以了!!!
这真是令人困惑,因为一个是别人的别名......
代码复制:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="resources/Sencha/sencha-touch-debug.js" type="text/javascript"></script>
<link href="resources/Sencha/sencha-touch.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
MyPanel = Ext.extend(Ext.Panel, {
fullscreen: true,
initComponent: function() {
this.items = [{
xtype: 'button',
text: 'Login',
handler: this.myHandler,
scope: this
}];
MyPanel.superclass.initComponent.apply(this, arguments);
},
myHandler: function(b, e) {
console.log(e.event.type);
}
});
Ext.EventManager.onDocumentReady(function() {
});
Ext.onReady(function() {
new MyPanel();
});
</script>
</head>
<body></body>
</html>
答案 0 :(得分:0)
我遇到了未修饰的链接节点的问题。我设法通过在touchend
个节点上执行A
个事件来修复它:
document.addEventListener('touchend', function(e) {
e.preventDefault() if e.target.localName == 'a')
}, true);
这不是您的问题,但可能是因为触发和click
事件被发送到窗口小部件而导致您的问题变得非常简单。 Here是我用来向我的控制台发送垃圾邮件的方法,尽可能多地发送所有正在发送的事件(即原始DOM事件,而不是Ext事件)。它可用于解决此类低级问题。