2013-02-15 39 views
0

我有一个简单的网页上嵌入的dojox.mobile.valuepicker。 valuepicker可以在任何桌面浏览器上正常工作,但在iPad或Android平板电脑上,它在浏览器中显示出一些奇怪的行为。如果您使用+和 - 按钮增加或减少iPad上的值,那么从窗口小部件返回的值总是比valuepicker中显示的值大1或小1(如果将小部件返回的值增加1比小部件显示的值还要多一个)。我已经在不同操作系统版本的多个iPad上尝试了这一点。这是我的代码。使用dojo如何在移动设备上正确捕获触摸事件?

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

从我已经能够拼凑OK看来道场触摸事件处理内置了它的延迟机制(来处理双触摸和缩放手势类型)。因此,为了确保我从更新的小部件获得正确的值,我在触发事件后运行了一个小延迟(250毫秒)。这现在从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); 
       }); ' 

看来我需要的延迟,因为我有一个小窗口值执行一个widget触摸事件被触发后立即进行一些处理。上面的作品对我来说是这样的,但我确定是否有一些时髦的Dojo处理方式。

相关问题