2015-09-29 166 views
0

我有两个过滤器,检查我的地图上的某个值范围之间,当它们不在该范围之间时,将标记变为不可见。它们都可以很好地分开工作,但不能合并,当filter1被激活时,它会将标记设置为可见,例如,filter2将其设置为不可见。我试图通过检查标记是否可见getVisible()来阻止它,所以它不会再打开不可见的标记,但这会阻止我放置更高的价格范围。多个过滤器谷歌地图

任何帮助将不胜感激,我已经包括一个JSFiddle下面。

http://jsfiddle.net/jaj1b018/5/

function priceRange() { 
    var price1 = parseInt(document.getElementById("price1").value.replace(/\./g, ''), 10); 
    var price2 = parseInt(document.getElementById("price2").value.replace(/\./g, ''), 10); 
    infoWindow.close(); 

    for (i = 0; i < markers.length; i++) { 
    mark = markers[i]; 
    if (parseInt(mark.prijs.replace(/\./g, ''), 10) > price1 && parseInt(mark.prijs.replace(/\./g, ''), 10) < price2 && mark.getVisible() == true) { 
     mark.setVisible(true); 
    } else { 
     mark.setVisible(false); 
    } 
    } 
} 

回答

0

只需要将您在同一按钮事件处理两个过滤器(如oppervlakteRange):

function oppervlakteRange(){ 
    var WoonOpp1 = document.getElementById("WoonOpp1").value; 
    var WoonOpp2 = document.getElementById("WoonOpp2").value; 
    var price1 = parseInt(document.getElementById("priceR1").value.replace(/\./g, ''), 10); 
    var price2 = parseInt(document.getElementById("priceR2").value.replace(/\./g, ''), 10); 

    for(i=0;i<markers1.length;i++){ 
     mark = gmarkers1[i]; 

     if(parseInt(mark.woonop.replace(/\m2/g, ''), 10) > WoonOpp1 && 
      parseInt(mark.woonop.replace(/\m2/g, ''), 10) < WoonOpp2 && 
      parseInt(mark.price.replace(/\./g, ''), 10) > price1 && 
      parseInt(mark.price.replace(/\./g, ''), 10) < price2){ 
      mark.setVisible(true); 
     } 
     else{ 
      mark.setVisible(false);  
     } 
    } 
} 

而对于双上肢值过滤器确保可能的最高值是selected默认情况下:

<select id="priceR2"> 
    <option value="200.000">200.000</option> 
    <option value="300.000">300.000</option> 
    <option value="400.000" selected>400.000</option> 
</select> 

<select id="WoonOpp2" class="controls"> 
    <option value="50">50 m2</option> 
    <option value="100">100 m2</option> 
    <option value="150">150 m2</option> 
    <option value="200" selected>200 m2</option> 
</select> 

取出priceRange方法,因为你不需要它了。

Demo小提琴:http://jsfiddle.net/jaj1b018/6/

0

必须同时检查合并成一个单一的功能:

function filterMarkers() { 
    var WoonOpp1 = document.getElementById("WoonOpp1").value; 
    var WoonOpp2 = document.getElementById("WoonOpp2").value; 
    var price1 = parseInt(document.getElementById("priceR1").value.replace(/\./g, ''), 10); 
    var price2 = parseInt(document.getElementById("priceR2").value.replace(/\./g, ''), 10); 

    for (i = 0; i < markers1.length; i++) { 
     mark = gmarkers1[i]; 

     if ((parseInt(mark.woonop.replace(/\m2/g, ''), 10) > WoonOpp1 && parseInt(mark.woonop.replace(/\m2/g, ''), 10) < WoonOpp2) && (parseInt(mark.price.replace(/\./g, ''), 10) > price1 && parseInt(mark.price.replace(/\./g, ''), 10) < price2)) { 
      mark.setVisible(true); 
     } else { 
      mark.setVisible(false); 
     } 
    } 
} 

updated fiddle

代码片段:

var gmarkers1 = []; 
 
var markers1 = []; 
 

 
window.onload = function() { 
 

 
    var infowindow = new google.maps.InfoWindow({ 
 
    content: '' 
 
    }); 
 

 
    // Our markers 
 
    markers1 = [ 
 
    ['0', '100.000', 52.4357808, 4.991315699999973, '50m2'], 
 
    ['1', '150.000', 52.4357808, 4.981315699999973, '75m2'], 
 
    ['2', '200.000', 52.4555687, 5.039231599999994, '100m2'], 
 
    ['3', '250.000', 52.4555687, 5.029231599999994, '125m2'], 
 
    ['4', '300.000', 52.4335687, 5.029231599999994, '150m2'] 
 
    ]; 
 

 
    /** 
 
    * Function to init map 
 
    */ 
 

 
    function initialize() { 
 
    var center = new google.maps.LatLng(52.4357808, 4.991315699999973); 
 
    var mapOptions = { 
 
     zoom: 12, 
 
     center: center, 
 
     mapTypeId: google.maps.MapTypeId.TERRAIN 
 
    }; 
 

 
    map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
 
    for (i = 0; i < markers1.length; i++) { 
 
     addMarker(markers1[i]); 
 
    } 
 
    } 
 

 
    /** 
 
    * Function to add marker to map 
 
    */ 
 

 
    function addMarker(marker) { 
 
    var price = marker[1]; 
 
    var pos = new google.maps.LatLng(marker[2], marker[3]); 
 
    var content = marker[1] + "</br>" + marker[4]; 
 
    var woonop = marker[4]; 
 

 
    marker1 = new google.maps.Marker({ 
 
     price: price, 
 
     position: pos, 
 
     woonop: woonop, 
 
     map: map 
 
    }); 
 

 
    gmarkers1.push(marker1); 
 

 
    // Marker click listener 
 
    google.maps.event.addListener(marker1, 'click', (function(marker1, content) { 
 
     return function() { 
 
     console.log('Gmarker 1 gets pushed'); 
 
     infowindow.setContent(content); 
 
     infowindow.open(map, marker1); 
 
     }; 
 
    })(marker1, content)); 
 
    } 
 

 
    // Init map 
 
    initialize(); 
 

 
}; 
 

 
function filterMarkers() { 
 
    var WoonOpp1 = document.getElementById("WoonOpp1").value; 
 
    var WoonOpp2 = document.getElementById("WoonOpp2").value; 
 
    var price1 = parseInt(document.getElementById("priceR1").value.replace(/\./g, ''), 10); 
 
    var price2 = parseInt(document.getElementById("priceR2").value.replace(/\./g, ''), 10); 
 

 
    for (i = 0; i < markers1.length; i++) { 
 
    mark = gmarkers1[i]; 
 

 
    if ((parseInt(mark.woonop.replace(/\m2/g, ''), 10) > WoonOpp1 && parseInt(mark.woonop.replace(/\m2/g, ''), 10) < WoonOpp2) && (parseInt(mark.price.replace(/\./g, ''), 10) > price1 && parseInt(mark.price.replace(/\./g, ''), 10) < price2)) { 
 
     mark.setVisible(true); 
 
    } else { 
 
     mark.setVisible(false); 
 

 
    } 
 
    } 
 

 
}
html, 
 
body, 
 
#map-canvas { 
 
    width: 100%; 
 
    height: 100%; 
 
}
<script src="https://maps.googleapis.com/maps/api/js"></script> 
 
<div id="map-canvas"></div> 
 
<select id="priceR1"> 
 
    <option value="100.000">100.000</option> 
 
    <option value="200.000">200.000</option> 
 
    <option value="300.000">300.000</option> 
 
    <option value="400.000">400.000</option> 
 
</select> 
 
<select id="priceR2"> 
 
    <option value="200.000">200.000</option> 
 
    <option value="300.000">300.000</option> 
 
    <option value="400.000">400.000</option> 
 
</select> 
 
<input type="button" onclick="filterMarkers()" value="button" /> 
 
</br> 
 
<select id="WoonOpp1" class="controls"> 
 
    <option value="50">50 m2</option> 
 
    <option value="100">100 m2</option> 
 
    <option value="200">200 m2</option> 
 
    <option value="250">250 m2</option> 
 
</select> 
 
<select id="WoonOpp2" class="controls"> 
 
    <option value="50">50 m2</option> 
 
    <option value="100">100 m2</option> 
 
    <option value="150">150 m2</option> 
 
    <option value="200">200 m2</option> 
 
</select> 
 
<input type="button" onclick="filterMarkers()" value="Klik hier" />