Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 jQuery/Mapbox多数据过滤器问题_Javascript_Jquery_Leaflet_Mapbox - Fatal编程技术网

Javascript jQuery/Mapbox多数据过滤器问题

Javascript jQuery/Mapbox多数据过滤器问题,javascript,jquery,leaflet,mapbox,Javascript,Jquery,Leaflet,Mapbox,我有一个内置Mapbox的地图,它以GeoJSON为基础。我试图通过两个标准过滤标记:类别(多个真/假属性)和年份。我希望这两个过滤器同时工作,而不是相互抵消,但在组合它们时,我遇到了麻烦 每个过滤器都独立工作-这是我今年所拥有的: $('.year a').on("click", function() { var year = $(this).data('filter'); $(this).addClass('active').siblings().removeClass('a

我有一个内置Mapbox的地图,它以GeoJSON为基础。我试图通过两个标准过滤标记:类别(多个真/假属性)和年份。我希望这两个过滤器同时工作,而不是相互抵消,但在组合它们时,我遇到了麻烦

每个过滤器都独立工作-这是我今年所拥有的:

$('.year a').on("click", function() {
    var year = $(this).data('filter');
    $(this).addClass('active').siblings().removeClass('active');
    featureLayer.setFilter(function(f) {
        return (year === 'all' || f.properties.Year === year);
    });
    return false;
}); 
这就是我的分类:

$('.category a').on("click", function() {
    var category = $(this).data('filter');
    $(this).addClass('active').siblings().removeClass('active');
    featureLayer.setFilter(function(f) {
        return ((category === 'all') ? true : f.properties[category] === true);
    });
    return false;
});
我就是这样把它们结合起来的,但我知道我做错了什么

$('.category a, .year a').on("click", function() {
    var category = $(this).data('filter');
    var year = $(this).data('filter');
    $(this).addClass('active').siblings().removeClass('active');
    featureLayer.setFilter(function(f) {
        return ((category === 'all') ? true : f.properties[category] === true) &&
        (year === 'all' || f.properties.Year === year);
    });
    return false;
});
我想我错过了区分这两个过滤器搜索的步骤,但我对jQuery不是很熟悉,所以我不确定我需要做什么。具体地说,我认为我缺少了类别var与.category a关联,年份var与.year a关联的部分

任何指向正确方向的指示都将不胜感激。谢谢

苏奥斯

您的问题可能是您以选择器为目标绑定单击事件的方式。正确的方法是:

$('.category a, .year a').on('click', function() { ... });

您没有提到问题,但我认为这可能是问题所在或其中之一。

您当前正在将
年和
日历设置为相同的值。尝试直接针对元素,而不是使用
this
,以避免该问题

$('.category a, .year a').on("click", function() {

  var category = $('.category a').data('filter');
  var year = $('.year a').data('filter');

  $(this).addClass('active').siblings().removeClass('active');
  featureLayer.setFilter(function(f) {
      return ((category === 'all') ? true : f.properties[category] === true) &&
      (year === 'all' || f.properties.Year === year);
  });
  return false;
});

谢谢,伊纳西奥-你说得对,我没有正确输入选择器。我已经纠正了这一点,两个过滤器的“全选”功能现在都可以使用了,但它仍然没有按类别或年份进行过滤,因此我认为我的代码还有其他问题。我还遗漏了什么吗?@suoz,你的代码没有错,除了选择器问题。不过,我认为你做错了。您应该从Mapbox示例中尝试这种方法:您的类别和年份设置为相同的内容!你有一个活生生的例子吗@马特帕里拉是对的,但很难确定这是否是问题所在。@BillMorris是的!就在这里:嗯,这个回报也没有像你预期的那样有效