2012-03-11 6 views
0

マイHTMLフォームは、次のように表示する項目を任意に選択することを有する:jQueryセレクターが最初の項目にのみ適用されるのはなぜですか?

<span class="Optional Command1 Command2"> 
    <label for="elem1">Elem 1:</label><input type="text" id="elem1" /><br /> 
</span> 
<span class="Optional Command1 Command3"> 
    <label for="elem2">Elem 2:</label><input type="text" id="elem2" /><br /> 
</span> 

HTML選択素子は、上記のHTML要素のクラスに対応するのCommand1、Command2を又はCOMMAND3を選択するために使用されます。選択変更イベントが発生すると、それは次の関数呼び出し

:elem1と上記のElem2両方のクラスに含まれるCommand1を、しかしながら

function showOptional(commandName) { 
    $('.Optional').hide(); // clear out optional inputs 
    $('.Optional').filter('.' + commandName).show(); // show relvant inputs 
} 

を、最初の入力要素は、表示されます。私はjQueryセレクターが両方を適用すると思った。

つまり、showOptional( 'Command1')Javascript関数では、Command1の最初のスパンのみが表示されますが、Command1の2番目のスパンは表示されません。なぜ両方ではない?

+0

コードは両方とも表示されます。そうでない場合は、他にも問題があります。 –

+0

私はそれが働くのを止める何も見ません、そして実際に私のために働く:http://jsfiddle.net/qH2KF/。クラスを削除できる別のコードがありますか? – nnnnnn

+0

あなたの関数で '.hide()'によって隠されています。関数に "Command2"または "Command3"を渡すようにフィードドのコードを変更すると、スパンの1つのみが表示され、他の文字列を渡すとnoneが表示されるので、確実に表示したコード問題は他の場所になければなりません。あなたが隠れているときにそれが動作するのを見たいと思えば:http://jsfiddle.net/qH2KF/3/ – nnnnnn

答えて

0

これは私の作品:

function showOptional(commandName) { 
    $('.Optional').hide(); // clear out optional inputsinputs 
    $('.Optional.' + commandName).show(); // show relvant 
} 

showOptional('Command1');​ 

はフィドル:http://jsfiddle.net/sYXuM/1/


しかし、あなたの独創的なアプローチは、同様に私の作品:http://jsfiddle.net/sYXuM/2/


私はちょうどperformance testを走りました次のコードはあなたの元のアプローチより速く、私のsugges上記のコード:

function showOptional(commandName) { 
    $('.Optional').hide().filter('.' + commandName).show(); 
} 
+0

あなたはそうです、それは動作します。私は幻覚を持っていたに違いない... –

+0

また、私はあなたがどのように2つのクラスを連結したのが好きです。私は最初にそれを試みましたが、スペースは2つのクラスの間にあるはずでしたので、私にとってはうまくいきませんでした(JS&jQueryを最後に使用して以来、ずっと時間がありました。 –

+0

@JHarri私はちょうどパフォーマンステストを実行して、私の答えを更新しました。 –

関連する問題