0

いくつかのラジオボタンとリストアイテムのリスト(ul / li)を含むページがあります。最初にページにアクセスすると、完全なリストが表示されます。ラジオをチェックするとリストが絞り込まれます。

私はいくつかのjqueryコードを見つけました、そしてそれはうまくいきました。(現在のフィルタリングに加えて)私が望んでいて見つけられなかったのは、ページがロードされたときに(まだクリックせずに)フィルタリングを開始して、事前定義/事前チェックされたラジオがある場合(以下の最初のラジオ)リストは、完全なリストではなく、すでにフィルタリングされたものになります。

ご協力いただきありがとうございます!jsfiddleのリンクは次のとおりです:http://jsfiddle.net/3NdHt/

<div class="tags">
<label><input type="radio" rel="apac" name="geo" checked /> APAC</label>
<label><input type="radio" rel="emea" name="geo" /> EMEA</label>
<label><input type="radio" rel="east" name="geo" /> US East</label>
<label><input type="radio" rel="west" name="geo" /> US West</label>
</div>
<br />

<ul class="results">
<li class="apac">APAC 1</li>
<li class="apac">APAC 1</li>      
<li class="emea">EMEA </li>
<li class="west east">WEST EAST 1</li>  
<li class="west">WEST 2</li>     
<li class="east">EAST</li>      
</ul>    

Jquery:

$(document).ready(function() {
$('div.tags').delegate('input[type=radio]', 'change', function() {
  var $lis = $('.results > li'),
  $checked = $('input:checked');
  if ($checked.length) {
    var selector = $checked.map(function (){
        return '.' + $(this).attr('rel');
    }).get().join('');
        $lis.hide().filter(selector).show();  
  } else {
    $lis.show();
}
});
});
4

1 に答える 1

1

.on()委任された変更イベント(代わりに使用する必要があるBTW .delegate())から関数を引き出し、ドキュメントの準備ができたときに呼び出すだけです。

jsFiddleの例

$('div.tags').delegate('input[type=radio]', 'change', update);
update(); // THIS CALLS THE FUNCTION ON DOC READY

function update() {
    var $lis = $('.results > li'),
        $checked = $('input:checked');
    if ($checked.length) {
        var selector = $checked.map(function () {
            return '.' + $(this).attr('rel');
        }).get().join('');

        $lis.hide().filter(selector).show();

    } else {
        $lis.show();
    }
}
于 2013-01-23T21:36:51.987 に答える