jQuery .ready()中的回调函数

时间:2015-07-27 21:44:32

标签: jquery svg callback

var county = 
[
    ["Beaverhead", 0],
    ["Deer Lodge", 0],
    ["Flathead", 0],
    ["Gallatin", 0],
    ["Golden Valley", 0],
    ["Park", 0]
];

function colorMap()
{
    for (var j = 0; j < county.length; j++)
    {
        console.log(county[j]);
        if( county[j][1] > 0 )
        {
            $('#' + county[j][0]).css({'fill': '#0000FF'});
        }
    }       
}

$(document).ready(function loader(colorMap){
var loop = 0;
    var offset = 0;
    while (loop < 2)
    {
        console.log(offset);
        var requestObject = $.ajax({url:'http://xbiod.osu.edu/OJ_Break/getTaxonOccurrences?tnuid=23188&place_id=137&show_children=Y&basic_only=N&format=jsonp&key=750B&version=2&limit=25&offset='+offset, type:'GET', dataType:'jsonp', crossDomain:true});

        requestObject.always(function(jData, status) 
        {
            console.log(offset);
            var result = '';
            console.log(jData.data.occurrences);
                for (var count = 0; count < jData.data.occurrences.length; count++) 
                {
                    var occurrence = jData.data.occurrences[count];
                    for (var i = 0; i < county.length; i++)
                    {
                        if ( occurrence.locality.hier.pol2.place_name == county[i][0] )
                        {
                            county[i][1]+=1;
                            console.log(county[i]);
                        }
                    }

                    result += '<div>' + occurrence.locality.hier.pol2.place_name + '</div>';
                }

                $('#included_id').html(result);
        });
      offset += 25;
      loop++;
    }

    colorMap();
});

我正在调用使用回调函数colorMap的函数加载器,但是回调从不运行。我无法弄清楚为什么它不起作用尽管无数的例子表明这是正确的方法。基本上,我想在加载器函数完成后编辑地图。 ajax被改为不起作用,但它与我的问题无关。

2 个答案:

答案 0 :(得分:0)

jQuery将自身的引用传递给ready()处理程序,因此当您尝试调用它时,colorMap实际上是对jQuery的引用:

// your `loader(colorMap)` function gets passed jQuery
$(document).ready(function loader(colorMap){
    ...
    // this is the same as calling `jQuery()` here, since `colorMap`
    // is now a reference to jQuery
    colorMap(); 
});

要解决此问题,只需从colorMap参数列表中删除loader(colorMap)

即,

$(document).ready(function loader() { ...

答案 1 :(得分:0)

我将colorMap放在setTimeout中,它可以按照我想要的方式工作。但是,我的嵌入式svg地图不会在IE中使用jQuery更新,但在Chrome和Firefox中也不错。