2013-02-15 60 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處理方式。

相關問題