2012-02-20 9 views
0

私はラジオボタンでulをコントロールしようとしています。ボタンをチェックすると、最後の(他の)liとチェックされたラジオボタンを含むliを消すことを除いて、すべてのliが欲しいです。私はかなり近いと思いますが、チェックされたラジオボタンのliを隠す方法を排除する方法はありません。私の推測では、.not(this).parent( 'li')セクションは正しい要素を対象としていませんが、代わりに何をしなければならないのか分かりません。ここまで私が作ったjavascriptがあります。jqueryでトリガー要素を含むli以外のリスト内のすべての要素をターゲットにする方法

$('input.addressradio').change(function(){ 
    $(this).parents('ul.address').find('li').not(this).parent("li").hide(); 
    $(this).parents('ul.address').find('li.allbutonetarget').show(); 
    return false; 
}); 

ここでは、私はそれをパワーにしたいと思います。

<ul class="address collectionaddressnewhideY"> 
<li> 
<input value="saved1" type="radio" class="include oneofmanyfieldset addressradio" name="collectionaddressradio" id="collectionaddressradiosaved1"></input> 
<span class="collectionaddresssaved1 savedaddress"> 
</span> 
</li> 
<li> 
<input value="saved2" type="radio" class="include oneofmanyfieldset addressradio" name="collectionaddressradio" id="collectionaddressradiosaved2"></input> 
<span class="collectionaddresssaved2 savedaddress"> 
</span> 
</li> 
<li><input value="saved3" type="radio" class="include oneofmanyfieldset addressradio" name="collectionaddressradio" id="collectionaddressradiosaved3"></input> 
<span class="collectionaddresssaved3 savedaddress"> 
</span> 
</li> 
<li class="allbutonetarget"><input value="other" type="radio" class="include oneofmanyfieldset addressradio" name="collectionaddressradio" id="collectionaddressradioother">Other </input> 
<span> 
</span> 
</li> 
</ul> 

誰かが正しい方向に私を指すと私は、これは間違っている場合、私は本当に感謝されると思います知っている可能性がある場合。

答えて

0
$('input.addressradio').on('change', function(){ 
    $(this).parent().siblings('li').not(this).not('.allbutonetarget').hide(); 
}); ​ 
0

.not()関数は、テストするDOM要素を含むDOM要素またはjQueryオブジェクトを受け取ることができます。あなたがthisの親を除外したい場合は、そのように、.not()関数に$(this).parent()を渡したい:

$('input.addressradio').change(function(){ 
    $(this).parents('ul.address').find('li').not($(this).parent("li")).hide(); 
    $(this).parents('ul.address').find('li.allbutonetarget').show(); 
    return false; 
}); 

はあなたのコードが間違っているつもりだった理由として、もう少し詳細に移動するには、あなたがなっていました<li>要素のセットであり、this(これは<input>要素であり、したがって元のセットには決してならない)を除外しようとします(<li>要素であり、元のセットになる可能性があります)そのセットから。どの要素もthisと一致していないので(どのように彼らは同じ型ではない)、セット全体は.not()への呼び出しによって返され、それらはすべて非表示になっています。

+0

ソリューションのおかげで、特に私が間違っていた理由を – cryotorched

0

あなたのラジオボタンからこれを除外していないが、あなたのli sから:

$(this).parents('ul.address').find('li').not(this).parent("li").hide() 

あなたが最初の両親を見つけ、その後、これを除外し、その後、すべてのラジオを見つける必要があります:

$(this).parents('ul.address').find('.addressradio').not(this).parent("li").hide() 
0

このことについて:

$('input.addressradio').click(function(){ 
    $('li').hide(); 
    $(this).parent().show(); 
    $('input[value="other"]').parent().show(); 
}) 

jsFiddle例。

0
$('input.addressradio').change(function() { 
    $(this).parent().siblings('li').not('.allbutonetarget').hide(); 
    return false;//keeps this one from being checked? you want that? 
}); 
  • li親タグ兄弟セレクタです。
  • .not().hideから (そのクラスのもの)を除きます。
  • 現在チェックされている のラジオは、それによって定義された の兄弟ではありません。
関連する問題