显示返回结果计数的函数是'没有按预期工作
Function to display returned results count isn't working as expected
我的jQuery复选框过滤器工作正常:
http://jsfiddle.net/EducateYourself/Lmehmj26/3/
在复选框形式下,我想显示结果的数量。默认情况下为7。
当我过滤结果时,它不会显示正确数量的显示结果。
你能帮我找出我的错误吗?
我评论了jsfiddle代码中添加变量n以获得我想要的结果的行。
$('.category').on('change', function () {
var n; //declare variable n
var category_list = [];
$('#filters :input:checked').each(function () {
var category = $(this).val();
category_list.push(category);
});
if (category_list.length == 0) {
$('.resultblock').show();
} else {
$('.resultblock').hide();
});
$('#count').text(n); // change the results qunatity
}
});
问题是,如果单个元素包含多个匹配标记,则会将n
多次递增。
对于每个元素,最多只能增加n
一次:
更新示例
$('.resultblock').each(function() {
var item = $(this).data('tag'),
itemArray = item.split(' '),
hasTag = false;
for (var i = 0; i < category_list.length; ++i) {
if (itemArray.indexOf(category_list[i]) >= 0) {
hasTag = true;
}
}
if (hasTag) {
$(this).show();
n++; // Only increment n once, at most, for each element.
}
});
这里有一个更干净、简化的代码版本:
更新示例
$('.category').on('change', function() {
var categoryList = $('#filters :input:checked').map(function() {
return this.value;
}).get();
var count = 0;
$('.resultblock').hide().each(function() {
var itemTagsArray = $(this).data('tag').split(' ');
var hasTag = false;
categoryList.forEach(function(tag) {
if (itemTagsArray.indexOf(tag) > -1) {
hasTag = true;
}
});
if (hasTag) {
$(this).show();
count++;
}
});
$('#count').text(count);
});
您正在计算双打,一个非常简单的解决方案是在for循环中添加可见性检查,就像一样
for (i = 0; i < category_list.length; ++i) {
if (itemArray.indexOf(category_list[i]) >= 0 && !$(self).is(":visible")) {
$(self).show();
n=n+1; //increase the value of n if found a result
}
}
如图所示,这是的工作原理
作为旁注,当您选中一个或多个复选框,然后全部取消选中时,编号会中断。为了防止这种情况,如果有任何复选框被选中到,你应该更改你的复选框
if (category_list.length == 0) {
$('.resultblock').show();
$('#count').text($('.resultblock').length);
}
相关文章:
- 函数hide()、prev()、show()被组装以获得所需的结果,但无法理解其工作原理
- 无法从IE中的data.responseText获取结果,但在其他浏览器中工作
- Javascript表排序工作得很好,但对所有索引进行迭代会得到不同的结果
- Javascript 不工作,结果打印后浏览器仍在加载
- 当我在Javascript中的.exec()结果上使用.index时,它是如何工作的
- 序列化方向结果到 JSON 发送到我的网络服务无法正常工作
- 异步功能在预期结果时停止工作
- 通过输入键(不起作用)或搜索按钮(工作)查询结果
- 如果我有两个选项的代码,单选按钮的结果将无法正常工作
- 谷歌博主的编号页面导航无法在搜索结果页上工作
- jquery插件 - 工作,但在调试时,结果甚至在到达该行之前就显示出来了
- 将结果从.html(或innerHtml)输入到inArray并使其工作
- I'我试图让jquery在我的chrome扩展的background.js中工作,结果成功了;不起作用.为什么?
- 2个SQL查询.两者独立工作.当我把它们放在一起时,第一个查询的结果变量是空的.为什么?
- Meteor findOne查询在一个模板助手中返回未定义的结果.在其他模板助手中,同样的查询也能很好地工作
- 显示返回结果计数的函数是'没有按预期工作
- .find("tagname")空结果(偶尔在Chrome中工作)
- 调用ASP中控制器的ActionMethod.. NET MVC从Javascript,结果在Excel工作表保存
- 数据显示更新数据结果,但更新数据结果是不工作的PHP
- PHP正则表达式不工作,返回主题字符串而不是正则表达式结果