選択ドロップダウンで複数オプションを使用すると、サファリで奇妙な問題が発生します。オプションを選択して「完了」と言うと、ドロップダウンが「0アイテム」の表示に戻ります。しかし、複数のオプション(複数)を選択すると、最初のオプションを除くすべてが選択されます。この後、すべてのオプションを選択解除すると、最後のオプションが選択されたままになります。
IOS 7.0.3でsafariを使用して デモの場合 を確認します。
<select multiple="multiple">
<option value="1">option 1</option>
<option value="2">option 2</option>
<option value="3">option 3</option>
</select>
私は http://www.thecssninja.com/html/optgroup-ios6 を見てきましたが、それはoptgroupsの使用に関する問題について述べています-これは(複数で使用される場合)現在サファリを完全にクラッシュさせるようです。
// hack for iPhone 7.0.3 multiselects bug
if(navigator.userAgent.match(/iPhone/i)) {
$('select[multiple]').each(function(){
var select = $(this).on({
"focusout": function(){
var values = select.val() || [];
setTimeout(function(){
select.val(values.length ? values : ['']).change();
}, 1000);
}
});
var firstOption = '<option value="" disabled="disabled"';
firstOption += (select.val() || []).length > 0 ? '' : ' selected="selected"';
firstOption += '>« Select ' + (select.attr('title') || 'Options') + ' »';
firstOption += '</option>';
select.prepend(firstOption);
});
}
単純な追加:
<option disabled></option>
複数選択の最初の要素として。
これは先日リリースされた7.1で部分的に修正されましたが、まだ多くの問題があります。アイテム数は正しくなりましたが...
optgroupのタイトルを選択できます(これはできません。選択できる場合は、少なくともグループ全体を選択/選択解除する必要があります。
オプションを無効にした場合<option disabled="disabled">Computer 1</option>
もちろんそれを選択することもできますが、もちろんそれは完全に間違っています。
一緒にAppleを手に入れよう。
iPhoneのiOS 7.0.3のSafariにある「複数選択」のバグは、Appleのディスカッションフォーラムでも報告されています。例えば。:
https://discussions.Apple.com/message/23745665#23745665
https://discussions.Apple.com/message/23607781#23607781
これを修正する必要があるのはAppleなので、この2つのディスカッションスレッドの投稿ごとに、この問題の解決を容易にするために何ができるかについてのコンセンサスアプローチは次のとおりです。
私は不思議なことにjQueryで動作するように修正を考え出したようです。 jQueryの依存関係が必要ない場合は、コードをバニラ化できると思います。
/**
* iOS mutliple select fix.
*/
if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
$('select[multiple]').each(function() {
$(this).prepend('<option disabled></option>');
$(this).append('<optgroup disabled></optgroup>');
});
}