我有几个单选按钮和列表项列表(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();
}
});
});
答案 0 :(得分:1)
将该功能从委派的更改事件中拉出来(顺便说一下,您应该使用.on()
而不是.delegate()
),然后在文档就绪时调用它。
<强> jsFiddle example 强>
$('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();
}
}