Javascript范围问题可能

时间:2015-02-11 14:54:04

标签: javascript jquery

我的变量'html'遇到问题。我认为我的范围是正确的,但是当我运行此代码时会发生奇怪的事情。 'html'变量的第一个警告产生一个空白结果,然后我用相同的'html'变量填充我的选择列表并且它可以工作,然后我再次警告'html'变量并显示选项。

如果我删除了两个警报,则列表不会弹出

function populateMakes(years)
{

    var makes = new Array();
    var html = "";

    $.each(years, function () {
        var uri = "/api/make?year=" + this;
        $.getJSON(uri, function (data) {             

            $.each(data, function () {
                if (jQuery.inArray(this.Id, makes) == -1)//makes not contain make
                {

                    makes.push(this.Id);

                    html += "<option value=" + this.Id + ">" + this.Value + "</option>";
                }

            });
        });

    });
    alert(html);
    $("#Make").html(html);
    alert(html);
    $("#MakeSection").removeClass("hidden");     


};

文档就绪脚本

$(document).ready(function () {
    populateYears();

    $("#Year").change(function () {
        $("#MakeSection").addClass('hidden');
        $("#ModelSection").addClass('hidden');
        $("#SubModelSection").addClass('hidden');

        populateMakes($("#Year").val());
    });

    $("#Make").change(function () {

        $("#ModelSection").addClass('hidden');
        $("#SubModelSection").addClass('hidden');

        populateModels($("#Year").val(), $("#Make").val());
    });

    $("#Model").change(function () {

        $("#SubModelSection").addClass('hidden');

       //
    });

    $("#Clear").click(function () {
        $("#YearSection").addClass('hidden');
        $("#MakeSection").addClass('hidden');
        $("#ModelSection").addClass('hidden');
        $("#SubModelSection").addClass('hidden');

        populateYears();
    })
});

1 个答案:

答案 0 :(得分:1)

.getJSON是异步的,我忽略了时机。我需要添加.done回调并在那里设置输出。该剧本尚未完成。

 $.getJSON(uri, function (data) {
            $.each(data, function () {
                if (jQuery.inArray(this.Id, makes) == -1)//makes not contain make
                {

                    makes.push(this.Id);

                    html += "<option value=" + this.Id + ">" + this.Value + "</option>";

                }

            });

        }).done(function () {
            $("#Make").html(html);
            $("#MakeSection").removeClass("hidden");
        });

我也没有在我在问题中发布的代码的事件处理程序中发送数组。我先修好了。