代码之家  ›  专栏  ›  技术社区  ›  Dan

jquery change事件中不可访问全局javascript变量

  •  0
  • Dan  · 技术社区  · 15 年前

    我必须错过一些简单的东西,但我真的不知道是什么。我不是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;
    });
    

    });

    这是里面的东西 .click(...) 回拨,我能看到 locations [] . 现在,当我在 .change(...) 回拨,我明白了 位置 undefined .

    如有任何帮助/见解,我们将一如既往地感谢您!

    1 回复  |  直到 15 年前
        1
  •  5
  •   Drew Wills    15 年前

    尝试更改此行…

    // Clear data
    var locations;
    

    对此…

    // Clear data
    locations = [];
    

    现在发生的事情是:您正在声明一个新的“locations”变量,它覆盖了全局变量。在javascript中,函数中声明的任何变量在整个函数中都是可见的——即使它们是在嵌套作用域中声明的(在您看来是这样的)。