jQueryを使用してドロップダウンの選択したインデックスを設定します


165

コントロールを見つける方法が次のようである場合、jQueryでドロップダウンのインデックスを設定するにはどうすればよいですか。

$("*[id$='" + originalId + "']") 

これは、コントロールを動的に作成しているためであり、Webフォームを使用するとIDが変更されるため、これがいくつかのコントロールを見つけるための回避策であることがわかりました。しかし、jQueryオブジェクトを取得したら、選択したインデックスを0(ゼロ)に設定する方法がわかりません。

回答:


352

まず第一に-そのセレクターはかなり遅いです。IDを探してすべてのDOM要素をスキャンします。要素にクラスを割り当てることができれば、パフォーマンスへの影響は少なくなります。

$(".myselect")

しかし、あなたの質問に答えるために、jQueryでselect要素の値を変更するにはいくつかの方法があります

// sets selected index of a select box to the option with the value "0"
$("select#elem").val('0'); 

// sets selected index of a select box to the option with the value ""
$("select#elem").val(''); 

// sets selected index to first item using the DOM
$("select#elem")[0].selectedIndex = 0;

// sets selected index to first item using jQuery (can work on multiple elements)
$("select#elem").prop('selectedIndex', 0);

それを行うためのより良い方法はありますか?IDに一致するようにDOM全体をスキャンすると考えましたが、私はjQueryを初めて使用しているので、それを機能させて、それを行うためのより良い方法があるかどうかを確認しましょう。任意のアドバイスをいただければ幸いです。
オンス

はい-検索する必要のある要素にクラスを割り当てることができれば、はるかに高速なセレクタになります。
gnarf 2009

@gnarfはIDの方が高速ではありませんか?
KBN 2014

#an-id*[id$=ends-with]「要素にクラスを割り当てる」が意味することは、より高速ですが、
かなり低速

選択したインデックス値が異なる複数のASP.net DropDownListがある場合はどうですか?
SearchForKnowledge 2015

106

これを見つけただけで、私にとってはうまくいき、個人的には読みやすくなっています。

これは、gnarfの回答番号3オプションと同じように実際のインデックスを設定します。

// sets selected index of a select box the actual index of 0 
$("select#elem").attr('selectedIndex', 0);

これは以前は機能しませんでしたが、今は機能します...バグを参照してください:http : //dev.jquery.com/ticket/1474

補遺

コメントで推奨されるように使用します:

$("select#elem").prop('selectedIndex', 0);


30
そして、jQuery 1.6以降.prop('selectedIndex', 0);では、.attr()動作するかどうかに関係なく使用する必要があります:)
gnarf

1
正解ですが、実際には1.7では機能しない可能性があります。:受け入れ答えを参照stackoverflow.com/questions/8010664/...
4imble

補遺の+1。この問題が原因で古いコードが壊れました
BiLaL 2014

11

私は2015年にこの回答を書いています。何らかの理由で(おそらく古いバージョンのjQuery)、他の回答はどれもうまくいきませんでした。つまり、選択したインデックスが変更されますが、実際のドロップダウンには反映されません。

インデックスを変更する別の方法を次に示します。実際には、ドロップダウンに反映させます。

$('#mydropdown').val('first').change();

1
ご回答有難うございます。この答えだけが私のために働いています
Viraj Dhamal '11 / 09/15

また、2015年にはprop('selectedIndex', ...);、選択の変更(ChromeおよびFirefoxでテスト済み)に問題はありません。
ランバート

2
何それの価値のために、あなたがここに別のをやっていることを指摘しなければならないトリガさchangeも呼び出すことにより、選択を変更している人々のために便利/対処することができ、ドロップダウン、上のイベントをprop('selectedIndex', ...)、というよりもval(...)。おそらく問題は、あなたがchangeイベントを聞いていることでした、そしてそれがあなたにとってうまくいかなかったものですか?それは単に変えることは事実だprop... ertyするすべてのイベントを発射するつもりはない
Lambart

9

私は使っています

$('#elem').val('xyz');

value = 'xyz'のオプション要素を選択する


9

jQueryコード:

$("#sel_status").prop('selectedIndex',1);

Jspコード:

Status:
<select name="sel_status"
    id="sel_status">
    <option value="1">-Status-</option>
    <option>ALL</option>
    <option>SENT</option>
    <option>RECEIVED</option>
    <option>DEACTIVE</option>
</select>

3

select要素の最初のオプションの値を取得したいとします。

$("*[id$='" + originalId + "']").val($("*[id$='" + originalId + "'] option:first").attr('value'));

3

2番目のオプションを選択するには

$('#your-select-box-id :nth-child(2)').prop('selected', true);

ここで、 `trigger( 'change')を追加してイベントを発生させます。

$('#your-select-box-id :nth-child(2)').prop('selected', true).trigger('change');

これははるかに良い答えです。
Ben Dehghan


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