Sencha Touch:按钮处理程序单击一次两次 - 为什么?

时间:2011-06-23 16:09:14

标签: sencha-touch

我的按钮处理程序被调用两次 - 一次用于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>

1 个答案:

答案 0 :(得分:0)

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

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

这不是您的问题,但可能是因为触发和click事件被发送到窗口小部件而导致您的问题变得非常简单。 Here是我用来向我的控制台发送垃圾邮件的方法,尽可能多地发送所有正在发送的事件(即原始DOM事件,而不是Ext事件)。它可用于解决此类低级问题。