Je dois manquer quelque chose de simple, mais je ne sais pas trop quoi. Je ne suis pas un vétéran de JS, donc ceci peut être une réponse facile - j'espère bien :).Variable javascript globale non accessible dans jquery change event
J'ai un bouton qui, une fois cliqué, obtient des données de JSON. Quand une liste déroulante est changée, je vérifie s'il y a des données, si c'est le cas, je veux les effacer puisque la liste déroulante indique les données à récupérer quand on clique sur le bouton
Le Code:
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;
});
});
Voici la chose, Dans le rappel .click(...)
, je peux voir locations
est []
. Maintenant, quand je suis dans le rappel .change(...)
, je vois locations
est undefined
.
Toute aide/compréhension, comme toujours, est appréciée!
Merci Drew :). Question: les emplacements var à l'intérieur du callback ne sont pas exécutés tout de suite, n'est-ce pas? Je suppose que c'est pourquoi je n'ai jamais pensé à changer cela. Je savais que c'était quelque chose de simple cependant! – Dan