JQuery函数仅在警报消息时有效

时间:2014-01-30 08:40:49

标签: jquery xml

我有一个功能,我用它来填充带有数据的Google地图画布。当我单击菜单项并初始化它时,该功能完美运行,但是当我只运行$(document).ready中的函数时,它不起作用。我已经尝试通过$(document).load初始化它,但也没有运气。现在奇怪的是,如果我在特定行添加一个警告,该函数初始化就好了。我还注意到,如果我没有初始化它,我实际上需要在函数第一次运行之前两次单击其中一个菜单项。所以基本上,函数的第一次初始化就有了。它可能与第一次加载XML有关,不确定......

这是功能:

function getMap($li, $province, $zoom) {

    var $lat_array = [];
    var $long_array = [];

    $li.addClass("province-active");
    $li.siblings("li").removeClass("province-active");
    $li.css("background-image", "url(img/minus-icon-storefinder.png");
    $li.siblings("li").css("background-image", "url(img/plus-icon-storefinder.png");
    $li.siblings("li").children(".province-sub-menu").empty();
    $li.children(".province-sub-menu").empty();

    $.get('xml/map-data.xml', function(data) {$xml_text = data;}, 'text'); //If I add an alert here, the function works fine the first time
    var xml = $xml_text;
    var xmlDoc = $.parseXML( xml );
    var $xml = $( xmlDoc );

    $province = $xml.find('province[category="' + $province + '"]');

    $(".store-locations").empty();
    $(".store-locations").append("<h3>Click on the store for more information:</h3>");

    $province.find('shop').each(function(i) {
        $suburb = $(this).find("suburb").text();
        $shop = "<div class='shop'><h4>" + $suburb + ", <span>" + $(this).find("city").text() + "</span></h4><p>" + $(this).find("tel").text() + "</p><p>" + $(this).find("fax").text() + "</p>" + "<a href=''>View store details</a></div>";

        $li.children(".province-sub-menu").append("<li data-suburb='" + $suburb + "'>" + $(this).find("suburb").text() + "," + $(this).find("city").text() + "</li>");

        $(".store-locations").append($shop);
        $lat_array[i] = $(this).find("lat").text();
        $long_array[i] = $(this).find("long").text();
     });

    initialize($lat_array, $long_array, $zoom);
}

以下是点击之外的函数初始化:

var $head_office = $("#head-office");
var $province = "Head Office";
getMap($head_office, $province, 17);

这是点击功能:

$(".provinces > ul > li").click(function() {
    $li = $(this);
    $province = $li.children("p").text();   
    getMap($li, $province, 15); 
});

谢谢!

1 个答案:

答案 0 :(得分:2)

您不是在等待GET请求完成。 GET之后的代码需要在onsuccess处理程序中。

等待警报清除,你给它足够的时间意外完成。