多个复选框删除javascript中的非共享值
所以我有以下问题 我有一套复选框。第一个描述了类别(比如某些类型的企业),它们与某些设施相关联 假设我有多个复选框删除javascript中的非共享值,javascript,checkbox,Javascript,Checkbox,所以我有以下问题 我有一套复选框。第一个描述了类别(比如某些类型的企业),它们与某些设施相关联 假设我有 Restaurant: Parking, Free WIFI Hotel: Venues, Parking, Free WIFI, Lunch, Drinks Bar: Parking, Drinks 我可以访问一个名为typeFacilitiesLinks {Restaurant: ["Parking", "Free WIFI"], Hotel: ["Venues", "Parking"
Restaurant: Parking, Free WIFI
Hotel: Venues, Parking, Free WIFI, Lunch, Drinks
Bar: Parking, Drinks
我可以访问一个名为typeFacilitiesLinks
{Restaurant: ["Parking", "Free WIFI"],
Hotel: ["Venues", "Parking", "Free WIFI", "Lunch", "Drinks"],
Bar: ["Parking", "Drinks"]}
所以当我选中餐厅复选框时,停车和免费WIFI复选框就会显示出来。当我点击酒吧时,会显示饮料
var checkedArrayFacilities = [];
$(document).on('click', '.industry-checkbox', toggleFacilitiesShow);
function toggleFacilitiesShow(e) {
var $this = $(e.currentTarget);
var checkedIndustry = $this.val(); // E.g. Restaurant
var $facilitiesContainer = $('.facilities_container');
if ($this.is(':checked')) {
var index = checkedArrayFacilities.indexOf(checkedIndustry);
if (index > -1) {
checkedArrayFacilities.splice(index, 1);
} else {
checkedArrayFacilities.push(checkedIndustry);
}
for (var el in typeFacilitiesLinks) {
if (typeFacilitiesLinks.hasOwnProperty(el)) {
if (el === checkedIndustry) {
$facilitiesContainer.find('.check-facility').each(function(){
var $input = $(this);
if ( $.inArray( $input.val(), typeFacilitiesLinks[checkedIndustry] ) !== -1 ) {
$input.parents('.single_check').addClass('show');
$facilitiesContainer.removeClass('hidden');
}
});
}
}
}
}
}
这个很好用。我不知道如何移除这些设施,但只能移除那些在其他设施中没有重复的设施。想象一下,我检查了所有三家公司。我展示了他们所有的设施。现在,若我把餐厅搬走,一切都不会改变,因为酒店有免费的无线网络,停车场和酒吧也有停车场
但如果我检查了餐厅和酒吧,并移除了酒吧,我只会丢失“饮料”复选框,而不会丢失“停车”复选框
我选中的选项越多,显示的设施越多,这种关系就越复杂:S
解决这个问题的最佳方法是什么?我得到的只是从选中选项中删除设施,这并不好。如果每次选中复选框时重置
typeFacilitiesLinks
并根据当前选中的复选框完全重新计算设施,它应该可以解决您的问题。一个可能的解决方案是重置设施
,并在每次选中复选框时完全重新计算。这实际上非常好。我只想显示checkedArrayFacilities
阵列中企业的设施。我还没想到那个!我添加了我的评论作为回答;如果它对你有效,请随意将其标记为已接受,这样这个问题就不会出现在“未回答的问题”堆中。谢谢成功了!太简单了!谢谢,我会在2分钟内接受。我花了整整两个小时在这一个过度工程它。