2010-12-02 3 views
4

は、ID識別子を使用してドロップダウンリストの次のオプションを選択しようとしているが、無駄にここ次のオプションのjqueryの

は、私は#chapter<select>またはその祖先の一つであると仮定したコード

$('#chapter option:selected', 'select').removeAttr('selected').next('option').attr('selected', 'selected') 
+0

あなたのマークアップはどのように見えますか? #chapterまたは 'select'のどちらかがここで重複しています。つまり、* all * selectでこれを変更するか、特定のselectでのみ変更します。 –

+0

http://jsfiddle.net/はあなたの友人です! – Jakub

+0

私はちょうど<3 http://jsbin.com –

答えて

6

です。

この場合、コンテキスト引数を削除してください。

$('#chapter option:selected').removeAttr('selected') 
       .next('option').attr('selected', 'selected'); 

あなたはそれを持っていた方法で、あなたはこれを効果的にやっていた。

とelelentから下降 option:selectedを持って <select>内の要素 を探している
$('select').find('#chapter option:selected').removeAttr(... 

... chapter ID。


EDIT:この回答は選択が働いていなかった理由について、単に集中していました。 @Andy E's answerの方法を使用して最終的なタスクを達成する方が良いでしょう。

私は受け入れられた答えとして1つをお勧めします。

+0

OPのオリジナルコードですが、あなたが設定している場合は 'selected'属性を削除する必要はありません別のオプション要素に –

+1

@Andy E - ちょうどこれに戻る。いい視点ね。私は選択がうまくいかなかった理由に焦点を合わせました。 – user113716

5

<select>要素が複数属性を持っていない限り、それは、あなたがその兄弟の1にそれを追加しているとき<option>要素からselected属性を削除する必要があります。

patrick dw's answerは(そしてあなたがそれを受け入れてきたので、それがある)が正しい、あなたが戻ってそのルーツにDOMを取ることによって、以前よりもずっと効率的な何かにこのコードをリファクタリングしたと仮定すると:

$("#chapter")[0].selectedIndex++; 

ないに言及あなたが短いコードで保存している貴重なバイト。

+1

貴重なバイト。彼らは重要です '$("#chapter ")[0] .selectedIndex ++' – Raynos

+0

@Raynos:touché:-) –

+0

+1これはOPが最終的に達成しようとしているものに行く方法です。 – user113716

関連する問題