【问题标题】:Global JavaScript variable not accessible in jQuery change event在 jQuery 更改事件中无法访问全局 JavaScript 变量
【发布时间】:2011-01-29 13:49:20
【问题描述】:

我必须遗漏一些简单的东西,但我真的不确定是什么。

我有一个按钮,单击该按钮会获取 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;
});
});

事情是这样的,在.click(...) 回调中,我可以看到locations[]。现在,当我在.change(...) 回调中时,我看到locationsundefined

【问题讨论】:

    标签: javascript jquery global-variables scope


    【解决方案1】:

    尝试更改此行...

    // Clear data
    var locations;
    

    到这个...

    // Clear data
    locations = [];
    

    这是正在发生的事情:您正在声明一个新的“位置”变量,它覆盖了全局变量。在 JavaScript 中,函数中声明的任何变量在整个函数中都是可见的——即使它们是在(你喜欢的)嵌套范围中声明的。

    【讨论】:

    • 谢谢德鲁 :)。问题:回调中的 var 位置不会立即执行,是吗?我想这就是为什么我从没想过要改变它。不过我知道这很简单!
    猜你喜欢
    • 2019-03-29
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2014-04-08
    相关资源
    最近更新 更多