4

ここにあります:

<select id="test" onchange="alert(this.selectedIndex); this.selectedIndex = 0">
    <option>test1</option>
    <option>test2</option>
    <option>test3</option>
</select>

すべてのブラウザで問題なく動作します。iOS5では問題なく動作しました。iOS6では動作しません。アラート画面は表示されますが、2 番目の部分を無視してインデックスをリセットしているようです。奇妙なことに、onchange を onblur に変更すると、iOS6 Safari で動作するようになりますが、他のすべてのブラウザーが機能しなくなります。

それで、これは iOS のバグですか、それとも何ですか? どんな助けでも大歓迎です。

4

1 に答える 1

1

onbluriOS6 ユーザー エージェント フィルターを使用して を追加し、選択したインデックスも設定します。これよりも良い方法があると確信していますが、私にとってはうまくいきました(ここにいくつかのjQueryがあります):

<select id="test" onchange="alert(this.selectedIndex); this.selectedIndex = 0" onblur="FixSelecteOniOS6(this);">
    <option>test1</option>
    <option>test2</option>
    <option>test3</option>
</select>
<script>
    FixSelectOniOS6: function (ref){
        alert(ref.selectedIndex)
        var res = navigator.userAgent.match(/; CPU.*OS (\d_\d)/);
        if (res) {
            var strVer = res[res.length - 1];
            strVer = strVer.replace("_", ".");
            version = strVer * 1;
        }
        var i = 0,
        iOS = false,
        iDevice = ['iPad', 'iPhone', 'iPod'];

        for (; i < iDevice.length; i++) {
            if (navigator.platform === iDevice[i]) { iOS = true; break; }
        }
        if (navigator.platform.indexOf("iPad") != -1 && version == 6) {
            $(ref).find("option").removeAttr("selected");
            $(ref).find("option:first").attr("selected", "selected");
        }
    }
</script>
于 2012-10-09T14:42:13.027 に答える