0

シンプルな Web ページに dojox.mobile.valuepicker を埋め込んでいます。valuepicker はどのデスクトップ ブラウザでも正常に動作しますが、iPad または Android タブレットでは、ブラウザで奇妙な動作が見られます。+ および - ボタンを使用して iPad の値を増減すると、ウィジェットから返される値は常に、valuepicker に表示される値よりも 1 大きいか 1 小さくなります (ウィジェットによって返される値を大きくすると 1 小さい場合)。ウィジェットが表示する値よりも 1 つ多く減少します)。OSバージョンが異なる複数の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); 
                        } 
                     }); 

これは、ピッカー値が更新される前にキャプチャが発生したことに関係していると思いますが、更新に値が確実に取得されるようにするにはどうすればよいですか?

ありがとう、スティーブン

4

1 に答える 1

1

まとめてみると、Dojo タッチ イベント処理には (ダブル タッチとズーム タイプのジェスチャを処理するための) 遅延メカニズムが組み込まれているようです。そのため、更新されたウィジェットから正しい値を取得していることを確認するために、タッチ イベントが発生した後にわずかな遅延 (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);
                 }); '

ウィジェットのタッチイベントが発生した直後にウィジェットの値に対して実行する処理があるため、遅延が必要なようです。上記は私にとってはうまくいきますが、これを処理するためのファンキーな道場の方法があるかどうかは確信しています。

于 2013-02-25T11:15:14.677 に答える