Сообщение от Maksimchik
|
Я разобрался. Получается если что onmouse(move/out/...) какбы выполняют код из самого тега, и поэтому не находило переменных.
|
если таков вывод - то "нет, не разобрался".
Сообщение от Maksimchik
|
Если можно как то полегче обойти, прошу в студию. ^_^
|
конечно, для этого мы здесь.
window.onload = function(){ // *!*(0)*/!*
var menuimgs = document.getElementsByTagName("img"); // *!*(1)*/!*
/* КОД..... */
menuimgs.item(i).onmouseout = "menuimgs.item(i).style.width = '32px';"; // *!*(2)*/!*
/* КОД */
}
Начну я свой ответ с того, что в JS есть области видимости. (наверняка Вы знаете, что это такое. Если нет - прошу погуглить
). Т.е. переменная, определённая с локальной области, будет невидима в глобальной.
Отлично. что дальше?
Как видим на строке с отметкой
0, у нас (у Вас) там имеется функция-обработчик события завершения загрузки страницы. Т.е. функция-обработчик имеет свою область видимости (Ваш К.О.)...
Копаем дальше. Отметка
1 при исполнении этой функции создаётся локальная область видимости, и в неё помещается
menuimgs (очевидно).
Далее в
onmouseout мы помещаем строку-функцию, которая, как ожидается, должна нормально хавать локальную область видимости. Отметка
2. А вот тут и ошибочка. Почему?
Ответ прост :
Строка эта исполняется, как код функции. Какой единственный способ так сделать? Правильно, конструктор функций new Function. А он видит только глобальную область видимости. А т.к. переменная не определена в глобальной области - её нет. Это и вызывает ошибку.
Пример кода в тему :
var foo = "foo";
(function () {
var bar = "bar";
try {
new Function("", "alert(foo + bar)")();
} catch (e) {
alert(':)');
}
})();
Как решить? подсказка : обработчики событий - это функции, а не строки