Видимость переменной про onLoad
Я только начал заниматься яваскриптом, поэтому вопрос может быть глупый. Вот код
var desc; var img = new Image(); img.onload = function(){ var desc = true; } img.onerror = function(){ var desc = false; } img.src = '1.jpg'; alert(desc); Почему переменной desc не передаются значения? выводит undefined. Я догадываюсь что все дело в области видимости, но как это реализовать не знаю |
Цитата:
Но даже в нём видно что переменная desc не имеет значения (т.е. не определена)... Правда есть две функции в которых объявлены свои переменые desc. И если даже вызвать эти функции на исполнение (чего нет), это картину не изменит. Цитата:
Цитата:
|
Попробую по другому объяснить - необходимо предварительно проверить наличие картинки, в зависимости от результата(есть или нет) формируется строка т.е при наличии картинки на сервере выводится текст + сама картинка, если картинки нет то только текст.
Так вот данный "огрызок" кода призван проверять факт наличия изображения на сервер и выдавать результат в виде desc. Выглядит так:
var desc;
var img = new Image();
img.onload = function(){
var desc = true;
}
img.onerror = function(){
var desc = false;
}
img.src = '1.jpg';
if (desc)
{ .... }
else { .... }
Пробовал так
var desc;
var img = new Image();
img.onload = function(){
desc = true;
}
img.onerror = function(){
desc = false;
}
img.src = '1.jpg';
if (desc)
{ .... }
else { .... }
Результат тот же. Так же заметил что в теле функций onload и onerror значение desc присваивается, но за ними desc undefined Не ругайте, постарался изложить как мог |
Цитата:
Попробую объяснить... Вот это из области видимости переменных
var test=1;
go(2);
alert(test);
set(3);
alert(test);
function go(N) {
var test=N;
};
function set(N) {
window.test=N;
};
|
А это твой вариант...
var test=1;
var a=function go() {
var test=2;
};
alert(test);
var b=function set() {
window.test=3;
};
alert(test);
Разницу видишь? |
Всё это я к чему... К тому, что язык выполняет последовательность команд как "понимает" их он. А не так, как их понимаешь ты. :)
|
Спасибо за помощь, только разница в том что
var a=function go() {
var test=2;
};
В примере не выполняется пока ее не вызовешь, а в моем случае
img.onload = function(){
desc = true;
}
onload выполнит действие desc=true. Вообщем так и не понял как в с помощью этой функции изменять значения переменной, видимо onload/onerror выполняются в каком то отдельном контексте. |
Цитата:
А вот свой так и не понял... Показываю еще раз, т.с. максимально приблизив к боевым.
var desc;
var img = new Image();
img.onload = function(){
//var desc = true;
alert(1)
}
img.onerror = function(){
//var desc = false;
alert(2)
}
img.src = 'http://javascript.ru/forum/images/smilies/smile.gif';
///alert(desc);
Хотя нет. :) Не прав тут я... Тогда вот тебе нужный вариант.
window.desc=0;
var img = new Image();
img.onload = function(){
window.desc = true;
}
img.onerror = function(){
window.desc = false;
}
img.src = 'http://javascript.ru/forum/images/smilies/smile.gif';
setTimeout(function(){alert(window.desc);},200);
Т.е. onload не выполняется мгновенно... Ему ведь нужно дождаться когда картинка загрузится. Только тогда и наступает это событие. |
Во спасибо, как раз то что было нужно:)
|
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 16:40. |