gpt4 book ai didi

sencha-touch - Sencha 触摸 : Button handler called twice for single click - why?

转载 作者:行者123 更新时间:2023-12-04 23:51:43 27 4
gpt4 key购买 nike

我的按钮处理程序被调用了两次 - 一次用于 mousedown/touchstart,第二次用于 mouseup/touchend。

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

使用 ST 1.1

我还没有找到任何关于这个问题的引用资料,这似乎表明我的环境中有什么东西是错误的,但我已经没有东西可以检查了......

在 Chrome DevTools 中检查传递给处理程序的事件对象,我可以看到它们都是模拟的“点击”事件,第一个来自“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>

最佳答案

我在使用未修饰的链接节点时遇到过这个问题。我设法通过在 A 节点上吃 touchend 事件来修复它:

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

这不完全是你的问题,但很可能你的问题是类似的,由 touch 和 click 事件发送到小部件引起。 Here这是我用来向我的控制台发送尽可能多的所有事件(即原始 DOM 事件,而不是 Ext 事件)的垃圾邮件的方法。它对于解决此类低级问题很有用。

关于sencha-touch - Sencha 触摸 : Button handler called twice for single click - why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6457220/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com