我需要在 $.get 调用中引用我拥有的 JSON 数据变量。
我有 JSON 数据,这些数据正在被拉入然后被处理。
我有一些复选框,我想用它们来显示和隐藏标记。我有一个显示和隐藏功能,带有复选框的单击事件 - 它位于标记的 forloop 下方。
我得到的问题是只有第一个复选框显示并隐藏所有标记,所有其他复选框什么都不做。
我已确保 HTML 输出正确,并且当我在 show 或 hide 函数上执行 console.log() 以查看被拉入函数的值时,它正确显示。所以问题似乎出在 show and hide 函数中的 forloop 上。可能未正确引用数据或位置变量。
关于如何正确引用它的任何帮助都会很棒。
// JSON feed
$.get(mapURL + 'map/locations', function(result) {
var locations = $.parseJSON(result);
// Markers
var markers = [];
// Looping through the JSON data
for (var i = 0, length = locations.length; i < length; i++) {
var data = locations[i];
// Creating a marker and putting it on the map
var marker = new google.maps.Marker({
position: new google.maps.LatLng(data.lat, data.long),
map: map,
title: data.title,
icon: iconSrc[data.category]
});
markers.push(marker);
}// END for loop
/** Shows all markers of a particular category, and ensures the checkbox is checked **/
function show(category) {
console.log('show ' + data.category);
for (var i=0; i<locations.length; i++) {
if (data.category == category) {
markers[i].setVisible(true);
}
}
}// END function show
/** Hides all markers of a particular category, and ensures the checkbox is cleared **/
function hide(category) {
console.log('hide ' + data.category);
for (var i=0; i<locations.length; i++) {
if (data.category == category) {
markers[i].setVisible(false);
}
}
}// END function hide
/** Action when checkbox is clicked **/
$(".checkbox").click(function(){
var cat = $(this).attr("value");
// If checked
if ( $(this).is(":checked") ){
show(cat);
}
else {
hide(cat);
}
});
});