Sencha touch Sencha Touch:按钮处理程序为单次单击调用了两次-为什么?

Sencha touch Sencha Touch:按钮处理程序为单次单击调用了两次-为什么?,sencha-touch,Sencha Touch,我的按钮处理程序会被调用两次——一次调用mousedown/touchstart,第二次调用mouseup/touchend 这在我的iPhone设备和Chrome浏览器上都会发生 使用st1.1 我还没有找到任何关于这个问题的参考资料,这似乎表明我的环境中有问题,但我没有东西要检查了 通过检查在Chrome DevTools中传递给处理程序的事件对象,我可以看到它们都是模拟的“tap”事件,第一个来自“mousedown”,第二个来自“mouseup” 有什么想法吗 编辑: 我发现,当我向Ex

我的按钮处理程序会被调用两次——一次调用mousedown/touchstart,第二次调用mouseup/touchend

这在我的iPhone设备和Chrome浏览器上都会发生

使用st1.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>

MyPanel=Ext.extend(Ext.Panel{
全屏:对,
initComponent:function(){
此项。项目=[{
xtype:'按钮',
文本:“登录”,
handler:this.myHandler,
范围:本
}];
MyPanel.superclass.initComponent.apply(这是参数);
},
myHandler:函数(b,e){
console.log(例如event.type);
}
});
Ext.EventManager.onDocumentReady(函数(){
});
Ext.onReady(函数(){
新的MyPanel();
});

我遇到了未修饰链接节点的问题。我通过在
A
节点上吃
touchend
事件来修复它:

document.addEventListener('touchend', function(e) {
  e.preventDefault() if e.target.localName == 'a')
}, true);

这并不完全是您的问题,但您的问题很可能是由发送到小部件的触摸和
单击事件引起的这是一种我用来向控制台发送尽可能多的发送事件(即原始DOM事件,而不是Ext事件)的方法。这对于解决此类低级问题非常有用。

您能提供一些示例代码吗?或者,如果添加了复制代码+导致根本原因,则指向示例的实时链接也会起作用。你找到解决办法了吗?@kalyanipuvvada我不记得找到了原因,但我认为使用“Ext.onReady”而不是“Ext.EventManager.onDocumentReady”的解决方法对我来说已经足够了。