Глобальная переменная javascript недоступна в событии изменения jquery - PullRequest
0 голосов
/ 19 марта 2010

Я должен упустить что-то простое, но я действительно не уверен, что. Я не ветеран 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(...), я вижу locations это undefined.

Любая помощь / понимание, как всегда, ценится!

1 Ответ

5 голосов
/ 19 марта 2010

Попробуйте изменить эту строку ...

// Clear data
var locations;

к этому ...

// Clear data
locations = [];

Вот что происходит: вы объявляете новую переменную 'location', которая покрывает глобальную переменную. В JavaScript любые переменные, объявленные в функции, видны во всей функции - даже если они объявлены (как вам кажется) во вложенной области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...