IE8で複数行の選択ボックスのすべてのオプションの選択を解除することができないのはなぜですか?
$("#myselect").children().removeAttr("selected");
回避策はありますか?私が考えることができるもの(attr( "selected"、 "")など)は機能していないようです。
更新: 更新されたjsFiddleがあります 私は少なくともが低下しているため、IE8では最初のオプションが選択されています。しかし、ハードコードされたselected = 'selected'andIE8が必要と思われる.attr呼び出しがない場合、Firefoxで3つの異なることを行いますChromeおよびIE8! このバージョンを参照してください: 、これはシンプルで、動作するはずです:
たぶん私は自分自身を夢中にさせて、そこに私が見ることができないどこかに間違いがありますか?
これは、jQueryがIE8に変換する方法の一部であり、必ずしもブラウザー自体ではありません。
私は古い学校に行ってjQueryを1行で中断することで回避できました。
document.getElementById('myselect').selectedIndex = -1;
質問は誤解を招くような方法で尋ねられます。 「selected
属性の削除」と「すべてのオプションの選択解除」は、完全に異なるものです。
文書化されたクロスブラウザ方式ですべてのオプションを選択解除するには、次のいずれかを使用します
$("select").val([]);
または
// Note the use of .prop instead of .attr
$("select option").prop("selected", false);
これは動作します:
$("#myselect").find('option').removeAttr("selected");
または
$("#myselect").find('option:selected').removeAttr("selected");
JQuery 1.9以降を使用:
$("#mySelect :selected").prop('selected', false);
@radiakの応答に似ていますが、jQueryを使用します( このAPIドキュメント およびselectedIndex
の変更方法に関するコメントを参照)。
$('#mySelectParent').find("select").prop("selectedIndex",-1);
このアプローチの利点は次のとおりです。
#mySelectParent
例では)さて、私はこの問題に多くの時間を費やしました。 Chrome AND IEで動作する答えを得るために、私はアプローチを変更しなければなりませんでした。アイデアは選択されたオプションを削除しないようにします。選択した属性をオプションに追加または設定するのではなく、selectedIndexプロパティを使用して「選択」レベルでオプションを選択します。
前 :
$('#myselect option:contains("value")').attr('selected','selected');
$('#myselect option:contains("value")').removeAttr('selected'); => KO with IE
後:
$('#myselect').prop('selectedIndex', $('#myselect option:contains("value")').index());
$('#myselect').prop('selectedIndex','-1'); => OK with all browsers
それが役立つことを願っています
別の選択肢:
$('option:selected', $('#mySelectParent')).removeAttr("selected");
それが役に立てば幸い