0

アクティブなメニューとして html select 要素を使用しています。そこからアイテムを選択すると、アクションが実行され、場合によっては、アクションの副作用によってメニューの値が別の値にリセットされます。

function onMenuChangeHandler() {
    var menu = $('#menu');
    var menuChoice = menu.val();
    if (menuChoice == ...) {
        ...
        menu.blur(); // ensure change handler doesn't get fired again
        menu.val(OTHER_VALUE);  // **
    }
};

これは、複数のブラウザーのデスクトップで正常に動作し、iOS5 でも正常に動作します。不可解なことに、iOS6 で動作しなくなりました。その結果、**上記の行が存在しないかのように動作します。

値を設定しなくても問題なく動作します。

参考までに: iOS6 には、これとは関係ないように思われる別の変更がありますが、念のために言及します。メニューが選択されると、ピッカーを開いたままにするのではなく、すぐに閉じるようになりました。これは、他のすべてのプラットフォームで機能する方法です。複数の select 要素がある場合でも、非標準の動作が発生します。

4

1 に答える 1

0

私はこれを追跡するために多くの時間を費やしましたが、最終的に問題は、変更ハンドラーが終了した後に iOS6 がコントロールの値を 2 回設定することであることがわかりました。アラートを配置すると、コントロールが (アラートの下) に変わることがはっきりとわかりますOTHER_VALUE。次に、アラートを閉じると、コントロールが元に戻ります。(アラートがないと、変化が速すぎてわかりません。)

したがって、回避策は次のとおりです。

function onMenuChangeHandler() {
    var menu = $('#menu');
    var menuChoice = menu.val();
    if (menuChoice == ...) {
        ...
        setTimeout(function() {
                menu.blur(); // ensure change handler doesn't get fired again
                menu.val(OTHER_VALUE);
            }, 1);
    }
};

他の誰かがより良い答えやより良い説明を持っているかもしれません。

于 2012-10-13T04:42:04.920 に答える