0

我需要在 $.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);
        }
    });
});
4

1 回答 1

1

这不是因为您没有data在循环中声明而发生吗?它应该是

function show(category) {
    console.log('show ' + data.category);
    for (var i=0; i<locations.length; i++) {
        var data = locations[i]; // <---- missing line
        if (data.category == category) {
            markers[i].setVisible(true);
        }
    }
}

( 或类似的东西 )

您的代码会产生这种效果,因为data变量从前一个循环“泄漏”。

于 2013-02-21T11:42:07.200 回答