使用dojo如何在移动设备上正确捕获触摸事件?

时间:2013-02-15 10:07:19

标签: web-applications mobile dojo

我在一个简单的网页上嵌入了dojox.mobile.valuepicker。 valuepicker适用于任何桌面浏览器,但在iPad或Android平板电脑上,它在浏览器中表现出一些奇怪的行为。如果使用+和 - 按钮增加或减少iPad上的值,则从窗口小部件返回的值总是比值拾取器中显示的值大1或小1(如果增加窗口小部件返回的值少1小部件显示的值,再减少一个)。我已尝试在具有不同操作系统版本的多个iPad上进行此操作。这是我的代码。

 var widgetValueIs = null; 
                    widgetToTest= dijit.byId("rateMeasurement"); 
                    widgetToTest.on("touchend, click, change", function() { 
                        widgetValueIs = dijit.byId('rateMeasurement').get('value'); 
                        if (widgetValueIs >= 12 && widgetValueIs <= 20){ 
                         domAttr.set("rateScore", "innerHTML", widgetValue); 
                        } else if (widgetValueIs >= 9 && widgetValueIs <= 11){ 
                         domAttr.set("rateScore", "innerHTML", widgetValue); 

                        } else { 
                         domAttr.set("rateScore", "innerHTML", widgetValue); 
                        } 
                     }); 

我认为在更新选择器值之前,这与我的捕获事件有关,但我如何确保在更新后检索到值?

谢谢, 斯蒂芬

1 个答案:

答案 0 :(得分:1)

好吧,从我能够拼凑到一起看来,Dojo触摸事件处理中内置了延迟机制(处理双触摸和缩放类型的手势)。因此,为了确保我从更新的小部件中获得正确的值,我在触发事件触发后运行了一小段延迟(250ms)。现在,这可以从dojox移动小部件中获取正确的值。

'var widgetValueIs = null; 
                widgetToTest= dijit.byId("rateMeasurement"); 
                widgetToTest.on("touchend, click, change", function() { 
                // Add a delay to compensate for Dojo's touch event handling 
                   setTimeout(function() {
                    widgetValueIs = dijit.byId('rateMeasurement').get('value'); 
                    if (widgetValueIs >= 12 && widgetValueIs <= 20){ 
                     domAttr.set("rateScore", "innerHTML", widgetValue); 
                    } else if (widgetValueIs >= 9 && widgetValueIs <= 11){ 
                     domAttr.set("rateScore", "innerHTML", widgetValue); 

                    } else { 
                     domAttr.set("rateScore", "innerHTML", widgetValue); 
                    } 
                   }, 250);
                 }); '

看来我需要延迟,因为我有一些处理在小部件触摸事件被触发后立即在小部件值上执行。以上对我有用然而我确定是否有一些时髦Dojo处理这个问题的方法。