ここにタイプミス(selectedFeaturess)がありますが、これはそれと関係がある可能性があります。
if (jQuery.inArray(selectedFeaturess[i], elem.features) !== -1 || jQuery.inArray(selectedFeatures[i], elem.features) > -1) {
また、これは私が疑うのを助けるつもりはありません:
<option value="Wendy's">Harveys</option>
このようなコード:
if (jQuery.inArray(selectedFeatures[i], elem.features) !== -1 || jQuery.inArray(selectedFeatures[i], elem.features) > -1) {
次のように簡略化できます。
if (jQuery.inArray(selectedFeatures[i], elem.features) !== -1) {
> -1の場合は!== -1であるため、2番目の句は冗長です。たとえば、= 0の場合、IF句の最初の部分が実行され、IFステートメントの2番目の部分を実行する必要はありません。
そして最後に、$(document).ready()関数を書き直しました。主な問題は、配列内の要素をどのようにループしていたかでした。それらをjqueryセレクターとして扱い、それらに対して.each()を実行する代わりに、単純なForループを実行する必要があります。ただし、jqueryセレクターを使用してそれらの長さを確認できます。これは私にとってはうまくいきます(オプションでWendy'sの名前をHarveysに変更しました)。
$(document).ready(function() {
//$('#filter').on('click', function(e) {
$('#filter').click(function(e) {
// prevent refreshing of the page
e.preventDefault();
// close all infoWindows
infowindow.close();
// hide all markers
$(markers.houses).each(function(index, elem) {
markers.houseMarkers[index].setVisible(false);
});
$(markers.condos).each(function(index, elem) {
markers.condoMarkers[index].setVisible(false);
});
// get the selected features from select box
var selectedFeatures = $("#features").val();
var selectedNearby = $("#nearby").val();
// for each house element...
$(markers.houses).each(function(index, elem) {
//first filter by selected features
if ($(selectedFeatures).length) {
for (var i = 0; i < selectedFeatures.length; i++) {
if (jQuery.inArray(selectedFeatures[i], elem.features) !== -1) {
if (!markers.houseMarkers[index].visible) {
markers.houseMarkers[index].setVisible(true);
}
}
}
}
//then filter by nearby selections
if ($(selectedNearby).length) {
for (var i = 0; i < selectedNearby.length; i++) {
if (jQuery.inArray(selectedNearby[i], elem.nearby) !== -1) {
// if marker is not visible, but meets the filtering criteria - show it
// otherwise leave it as it is
if (!markers.houseMarkers[index].visible) {
markers.houseMarkers[index].setVisible(true);
}
}
}
}
});
// for each condo element...
$(markers.condos).each(function(index, elem) {
// first filter by selected features
if ($(selectedFeatures).length) {
for (var i = 0; i < selectedFeatures.length; i++) {
if (jQuery.inArray(selectedFeatures[i], elem.features) !== -1) {
// if marker is not visible, but meets the filtering criteria - show it
// otherwise leave it as it is
if (!markers.condoMarkers[index].visible) {
markers.condoMarkers[index].setVisible(true);
}
}
}
}
//then filter by nearby selections
if ($(selectedNearby).length) {
for (var i = 0; i < selectedNearby.length; i++) {
if (jQuery.inArray(selectedNearby[i], elem.nearby) !== -1) {
// if marker is not visible, but meets the filtering criteria - show it
// otherwise leave it as it is
if (!markers.condoMarkers[index].visible) {
markers.condoMarkers[index].setVisible(true);
}
}
}
}
});
});
});