【发布时间】:2015-08-23 06:57:35
【问题描述】:
我正在使用输入复选框过滤具有数据属性的列表项。
当一个特定的输入项被选中时,所有元素都会被隐藏,即使它们与选中的值无关。
这是我的 jQuery 代码:
jQuery(document).ready(function () {
//start filter
jQuery('.cs-widget-content').delegate('input[type=checkbox]', 'change', function() {
var lis = jQuery('.five-column > li.column');
var checked = jQuery('input:checked');
if (checked.length)
{
var selector = '';
jQuery(checked).each(function(index, element){
selector += "[data-offer~='" + element.id + "']";
});
lis.hide();
jQuery('.five-column > li.column').filter(selector).show();
}
else
{
lis.show();
}
}); //end filter
});
这是JSFiddle
我正在寻找的解决方案
如何使此过滤正常工作,所有项目在页面加载时都应该可见,但是当检查输入值时,仅显示这些项目。隐藏其他所有内容。
【问题讨论】:
-
那么你的问题是什么?
-
请注意 - 您使用的是哪个 jQuery 版本?从 jQuery 1.7 开始,
.delegate()已被.on()方法取代。 -
似乎你先隐藏所有 li 然后显示与选中复选框相关的
- ,我认为这将永远不会工作,因为 jquery 运行异步,它不知道哪个先出现,所以隐藏/显示同时发生,并且可能隐藏在比赛条件下最后完成。您可以通过 setTimeout
在- 的显示中延迟执行来进行破解
-
@Vucko 我正在使用 jQuery 2.1.3
-
您的小提琴标记中有错字(
date-offer而不是data-offer)
标签: jquery