Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个复选框删除javascript中的非共享值_Javascript_Checkbox - Fatal编程技术网

多个复选框删除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分钟内接受。我花了整整两个小时在这一个过度工程它。