У меня есть веб-страница с различными элементами (список ссылок и два блока выбора), связанный между ними. Нажатие на них может повлиять на один из других элементов, и все их значения способствуют обновлению значения, отображаемого на странице.AJAX JQuery: порядок выполнения событий
Таким образом, код таков:
$(document).ready(function() {
var someVar = '';
$("select#size").bind('change', function() {
someVar = $(this).val();
console.log('first');
});
my_change();
console.log('second' + someVar);
});
function my_change() {
$.getJSON("photos/change_product", {json_stuff}, function(data) {
var options = [];
for (var i = 0; i < data.length; i++) {
options.push('<option value="' + data[i].id + '">' + data[i].label + '</option>');
}
$("select#size").trigger('change');
$("select#options").html(options.join('')).trigger('change');
})
};
};
Когда я загружаю страницу функция my_change
называется. Он делает кое-что, а затем запускает change event
на select-box. Мне нужно обновить значение, используя то, что находится внутри этого окна выбора, и только затем продолжить выполнение. Поэтому мне нужен этот код, чтобы напечатать «first», а затем «second» со значением переменной. На самом деле происходит то, что он печатает «второй» «первый».
Я думаю, это потому, что я выполняю асинхронные вызовы. Что я могу сделать?
он все еще печатает «второй», а затем «первый». кажется, что даже если событие 'change' запускается вручную внутри функции' my_change', оно затем фиксируется после, не знаю, когда. Мне нужно будет дождаться завершения изменения, чтобы я мог получить значение из выбранного – Carlo
@Carlo. Я только что создал тест и, похоже, работает как ожидалось: http://apexeleven.com/stackoverflow/jquery.when /test.html (щелкните панель в нижней части страницы, чтобы запустить тест, который вы можете сделать несколько раз, если хотите). – Jasper
вздох, действительно не знаю, что сказать. Я проверяю и перепроверяю свой код, и он выглядит (почти) тем же. На данный момент я думаю, что это может быть что-то действительно действительно глупое, но я не могу понять, что. Я вставил здесь весь код: http://jsfiddle.net/4V2RX/2/ Мне это выдает: второй, второй, первый размер, первые варианты 8 – Carlo