在jquery change事件中无法访问全局javascript变量

Dan*_*Dan 0 javascript jquery scope global-variables

我不得不遗漏一些简单的东西,但我真的不确定是什么.我不是JS的老手,所以这可能是一个简单的答案 - 当然希望如此:).

我有一个按钮,当单击时,获取JSON数据.当下拉列表更改时,我检查是否有数据,如果有,我想清除它,因为下拉列表指示单击按钮时要检索的数据

代码:

 var selected, $locDialog;
 var locations = [];

$(function() {
// Save the selected Name
selected = $("#selected option:selected").val();

// Setup Dialog for Locations
$locDialog = $('#location-dialog').dialog({
    autoOpen: false
});

// If user changes the selected
// 1.  Prompt for confirmation
// 2.  If users confirms, clear  data
$('#selected').change(function() {
    if (locations) {
        var confirmed = confirm("Oh Rly?");
        if (confirmed) {
            // Clear data
            var locations;
        }
    }
});

// When user clicks "Location" Button..
$('.loc-select button').click(function() {
    if (!locations) {
        $.getJSON("/Controller/JSONAction", { selectedId: selected, pageNum: 1, pageSize: 100 }, function(data) {
            locations = data;
            $.each(locations, function(index, loc) {
                var $tr = $('<tr/>')
                    .append($('<td/>')
                        .append('<input type="checkbox" name="TEST-'+index+'" value="'+loc.Id+'"/>'))
                    .append('<td>' + loc.Name + '</td>');
                $("#location-dialog table tbody").append($tr);
            });
        });
    }
    $locDialog.dialog('open');
    return false;
});
Run Code Online (Sandbox Code Playgroud)

});

这里的东西,里面的.click(...)回调,我可以看到locations[].现在,当我在.change(...)回调中,我看到的locationsundefined.

任何帮助/见解,一如既往,表示赞赏!

Dre*_*lls 5

尝试更改此行...

// Clear data
var locations;
Run Code Online (Sandbox Code Playgroud)

对...

// Clear data
locations = [];
Run Code Online (Sandbox Code Playgroud)

这就是正在发生的事情:你宣布一个覆盖全球变量的新"位置"变量.在JavaScript中,函数中声明的任何变量在整个函数中都是可见的 - 即使它们在嵌套范围中声明(看起来像你喜欢).