jQueryで<select>の選択を解除する最良の方法は?


219
<select size="2">
<option selected="selected">Input your option</option>
<option>Input your option</option>
</select>

オプションをエレガントに選択解除するには、jQueryを使用する最良の方法は何ですか?

回答:


347

removeAttrを使用...

$("option:selected").removeAttr("selected");

または小道具

$("option:selected").prop("selected", false)

3
IE 8を参照の下では動作しませんstackoverflow.com/questions/7960773/...
クリントンピアース

60
この答えは物事を行う方法ではありません(そして、起動するために普遍的に機能しません)。正しいアプローチは、.val([])または.prop("selected", false)-スクロールダウンします。
Jon

1
JQueryはこれを修正したに違いありません。JQuery1.7.2を使用するIE8では、私にとって完璧に機能しています。
Mikey G

2
OR .val([''])は、空の値があればそれを選択します。
Mark

2
$("option:selected").prop("selected", false)時々動作しません。(jquery v1.4.2を搭載したChromeブラウザでは機能しません)
Rohit Goyani '18年

163

ここにはたくさんの答えがありますが、残念ながらそれらのすべてはかなり古く、したがってattr/に依存しremoveAttrています。

@coffeeyespleaseは、適切なクロスブラウザソリューションを使用することを正しく述べています

$("select").val([]);

別の優れたクロスブラウザソリューションは

// Note the use of .prop instead of .attr
$("select option").prop("selected", false);

ここでセルフテストを実行しているのがわかります。IE 7/8/9、FF 11、Chrome 19でテスト済み。


1
selectの回答よりもはるかに優れています(クロスブラウザーで機能し、属性セットをいじる必要はありません)
Timothy Groote 2013年

1
すべてのオプションを選択解除するための完璧な答え。ただし、特定のオプションの選択を解除するために実際に使用することはできませんが、removeAttrは使用できます。
Mikey G

2
@MikeyG:これはArray.indexOfIE <9のポリフィルが必要であることに注意してください(または、多くのJSライブラリが提供する同等のメソッドを使用できます)。
2013年

1
後でHTMLを確認しました$('#select').val([]);か?残念ながら、これはselected="selected"属性を削除しません。間違ったデータが投稿される可能性があります。このアプローチはお勧めしません!
Fr0zenFyr

1
@ Fr0zenFyr:事前選択されたオプションから開始し、マウスクリックで手動で選択を解除した場合、属性も削除されません-もちろん、フォームを送信しても正しいデータが送信されることが保証されています。HTML 属性(初期状態を決定する)とDOM プロパティ(何が表示され、何が送信されるかを決定する)の間には、世界の違いがあります。これが、属性に焦点を当てたソリューションが正しくない理由です。属性はプロパティの初期値を決定しますが、それは可能な限りです。
ジョン

24

質問されてからしばらく経ちましたが、私は古いブラウザでこれをテストしていませんが、はるかに簡単な答えは

$("#selectID").val([]);

.val()は、selectでも機能しますhttp://api.jquery.com/val/


これが最善の方法であり、実際にほとんどのブラウザで値をクリアします-ありがとう。
Sagive SEO 2012

これは複数選択に対してのみ機能します。 $("select option").prop("selected", false);ユニバーサルに機能します(マルチおよびシングル選択で)。
19

23

最も簡単な方法

$('select').val('')

私は単にセレクト自体でこれを使用し、それはトリックをしました。

私はjQuery 1.7.1を使用しています。


1
この解決策について1つの問題に直面しました。オプションタグには、属性「selected」がまだあります
Tamara

@Tamaraほんと?確認しませんでした。あなたは何かのために「選択された」を使用していますか、そしてこれはあなたのために物事を台無しにしますか?
Joshua Pinter 2016年

19

これまでの回答は、IE6 / 7の複数選択に対してのみ機能します。より一般的な非マルチセレクトの場合、以下を使用する必要があります。

$("#selectID").attr('selectedIndex', '-1');

これはflyfishr64によってリンクされた投稿で説明されています。これを見ると、マルチ/非マルチの2つのケースがあることがわかります。完全なソリューションのために両方を実行することを妨げるものは何もありません。

$("#selectID").attr('selectedIndex', '-1').find("option:selected").removeAttr("selected");

7

ああjquery。

ネイティブのjavascriptアプローチがまだあるので、提供する必要があると感じています。

var select = document.querySelector('select'); //hopefully you'll use a better selector query
select.selectedIndex = 0; // or -1, 0 sets it to first option, -1 selects no options

これがどれだけ速いかを示すためだけに:ベンチマーク


jQueryなしでこの回答をありがとう!:)
サロマセ

6
$("#selectID option:selected").each(function(){
  $(this).removeAttr("selected");
});

これは、各項目を反復処理し、チェックされている項目のみを選択解除します


5

簡単なグーグルは、IEで単一の選択リストと複数の選択リストの両方に必要なことを行う方法を説明するこの投稿を見つけました。ソリューションもかなりエレガントに見えます:

$('#clickme').click(function() {
        $('#selectmenu option').attr('selected', false);

}); 



3

解決策をたくさんありがとう。

単一選択のコンボリストのソリューションは完全に機能します。多くのサイトを検索した後、これを見つけました。

$("#selectID").attr('selectedIndex', '-1').children("option:selected").removeAttr("selected");



1

通常、選択メニューを使用する場合、各オプションには値が関連付けられています。例えば

<select id="nfl">
  <option value="Bears Still...">Chicago Bears</option>
  <option selected="selected" value="Go Pack">Green Bay Packers</option>
</select>
console.log($('#nfl').val()) logs "Go Pack" to the console
Set the value to an empty string $('#nfl').val("")
console.log($('#nfl').val()) logs "" to the console

これで、選択した属性がオプションから削除されませんが、本当に必要なのは値だけです。


0

次のように、selectにIDを設定します。
<select id="foo" size="2">

それからあなたは使うことができます:
$("#foo").prop("selectedIndex", 0).change();

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.