Javascript 使用具有数据属性的产品列表进行筛选时出现问题
我创建了一个关于我的div筛选的代码。在这段代码中,我将data brand和data store作为div的两个属性,并将与这些div相关的复选框分别作为ids brand和store。当我一次使用brand或store进行筛选时。例如,如果您选择了一个品牌或一个store复选框,则选择其中的一个,它根据选择正确过滤。假设您选择了一个商店复选框。然后,我们从商店复选框列表中进行了第二次选择。然后,我们应该能够看到两个选择的商店列表。即,JCPenny和Super mart div都应显示,而不是先前选择的。但是,当我选择第二次商店复选框列表时,它隐藏第一个选中的复选框相关div,并显示第二个或最新选中的复选框div。品牌复选框也存在类似问题。 请帮帮忙这对我来说很重要Javascript 使用具有数据属性的产品列表进行筛选时出现问题,javascript,jquery,html,css,checkbox,Javascript,Jquery,Html,Css,Checkbox,我创建了一个关于我的div筛选的代码。在这段代码中,我将data brand和data store作为div的两个属性,并将与这些div相关的复选框分别作为ids brand和store。当我一次使用brand或store进行筛选时。例如,如果您选择了一个品牌或一个store复选框,则选择其中的一个,它根据选择正确过滤。假设您选择了一个商店复选框。然后,我们从商店复选框列表中进行了第二次选择。然后,我们应该能够看到两个选择的商店列表。即,JCPenny和Super mart div都应显示,而不
请对此提供帮助…以下是您需要修改的JS代码:
<div id="prod">
<div class="content" data-brand="Andrew" data-price="1000" data-store="JCPenny">Andrew</div><br />
<div class="content" data-brand="Hill" data-price="1200" data-store="JCPenny">Hill</div><br />
<div class="content" data-brand="Andrew" data-price="2000" data-store="JCPenny">Andrew</div><br />
<div class="content" data-brand="Hill" data-price="800" data-store="SuperMart">Andrew</div><br />
<div class="content" data-brand="Hill" data-price="1300" data-store="SuperMart">Hill</div><br />
<div class="content" data-brand="Andrew" data-price="800" data-store="JCPenny">Hill</div><br />
<input type="checkbox" class="brand" id="Andrew">Andrew
<input type="checkbox" class="brand" id="Hill">Hill
<input type="checkbox" class="store" id="JCPenny">JCPenny
<input type="checkbox" class="store" id="SuperMart">SuperMart
</div>
//checkBox();
$('input[type="checkbox"]').change(function(){
alert("check");
var a=$("input.brand");
var b=$("input.store");
var brand="";
var store="";
if($(a).is(":checked")) {
alert("brand checked");
$('#prod >div').hide();
brand=$(this).attr('id');
console.log(brand+","+store);
displaydivs(brand,store);
}
else{
$('#prod >div').show();
brand=""
displaydivs(brand,store);
}
});
function displaydivs(brand,store)
{
if(brand!="" & store!=""){
alert(brand);
alert(store);
$("#prod >div").hide();
$("#prod >div[data-store="+store+"][data-brand="+brand+"]").show();
}
else if(brand!="" & store==""){
$("#prod >div").hide();
$('#prod >div[data-brand="'+brand+'"]').show();
}
else if(brand=="" & store!=""){
$("#prod >div").hide();
$("#prod >div[data-store="+store+"]").show();
}
}
演示:您的代码乱七八糟。您的问题是有时调用displaydivs两次,每个选中的输入字段调用一次。我已经删除了存储区的第二个if块。现在只有一次调用displaydivs函数。现在,如果我从列表中选择两个品牌复选框,它只显示第二个的结果…现在要更改什么?这是同一个问题,妈妈。一旦你点击andrew复选框,然后点击hill并选中这两个复选框,它只显示hill相关的复选框…而不是andrewones@Dipali-妈妈,你能帮我解决我提到的问题吗?我已经尽力解决了。这是唯一剩下的事情了,为了休息,我想对你说你所有的努力thanks@Dipali-谢谢你这么好的解决方案,你能做一点小小的改变吗?比如如果你从列表中选择一个品牌复选框Andrew或Hill。然后你会看到相关的div。假设你选择了Andrew,之后你会选择两个商店中的一个。假设你选择了JCPenny,然后它应该匹配两者,即Andrew和JCPenny,并且应该给出Andrew和JCPenny所在的div。就像在这段代码中,如果你先选择JCPenny,然后是四个div,然后选择hill,那么应该给出一个div,因为hill和JCPenny只在一个div中。非常感谢妈妈
var a=$("input.brand");
var b=$("input.store");
var brand=new Array();
var store=new Array();
$('input[type="checkbox"]').change(function(){
if($(this).is(":checked")){
$('#prod >div').hide();
if(this.className == "brand"){
console.debug("brand checked");
brand.push($(this).attr('id'));
}else if(this.className == "store"){
console.debug("store checked");
store.push($(this).attr('id'));
}
console.log(brand+","+store);
displaydivs(brand,store);
}else{
$('#prod >div').show();
if(this.className == "brand"){
var index = brand.indexOf($(this).attr('id'));
if (index > -1) {
brand.splice(index, 1);
}
}else if(this.className == "store"){
var index = store.indexOf($(this).attr('id'));
if (index > -1) {
store.splice(index, 1);
}
}
displaydivs(brand,store);
}
});
function displaydivs(brand,store)
{
$("#prod >div").hide();
if(brand.length > 0 & store.length > 0){
$.each(brand, function( index, value ){
var temp = $("#prod >div[data-brand="+value+"]")[0];
var data = $(temp).attr("data-store");
var idx = store.indexOf(data);
if(idx > -1){
$("#prod >div[data-brand="+value+"][data-store="+data+"]").show();
}
});
$.each(store, function( index, value ){
var temp = $("#prod >div[data-store="+value+"]")[0];
var data = $(temp).attr("data-brand");
var idx = brand.indexOf(data);
if(idx > -1){
$("#prod >div[data-brand="+data+"][data-store="+value+"]").show();
}
});
}
else if(brand.length > 0 & !(store.length > 0)){
$.each( brand, function( index, value ){
$("#prod >div[data-brand="+value+"]").show();
});
}
else if(!(brand.length > 0) & store.length > 0){
$.each( store, function( index, value ){
$("#prod >div[data-store="+value+"]").show();
});
}else{
$("#prod >div").show();
}
}