Видимость переменной про 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, время: 01:56. |