Существующая переменная не существует.
С помощью кода увеличиваются картинки. Это для меню. Но дело в том что код не работает. alert не выводит ничего! Через оперу посмотрел в консоль ошибок, и там:
Код:
[03.07.2012 16:10:21] JavaScript - http://localhost/index.php Код: window.onload = function(){ var menuimgs = document.getElementsByTagName("img"); var links = Array(); for(var i = 0, i2 = 0; i < menuimgs.length; i++){ if(menuimgs.item(i).getAttribute("text") != null){ links[i2] = menuimgs.item(i); menuimgs.item(i).style.width = "32px" menuimgs.item(i).onmouseout = "menuimgs.item(i).style.width = '32px';"; menuimgs.item(i).onmousemove = "getLink(links,menuimgs.item(i),i2);"; i2++; } } } function getLink(links,element,num){ alert(links[num]); var img0 = num--, img1 = num, img2 = num++; if(links[img0] != null) links[img0].style.width = "48px"; if(links[img1] != null) links[img1].style.width = "64px"; if(links[img2] != null) links[img2].style.width = "48px"; var infostyle = document.getElementById("getLinkInfo"); } |
Я разобрался. Получается если что onmouse(move/out/...) какбы выполняют код из самого тега, и поэтому не находило переменных.
Если можно как то полегче обойти, прошу в студию. ^_^ |
справа должны быть функции-а не обрашения к функциям-
function(){menuimgs.item(i).style.width = '32px';} menuimgs.item(i).onmouseout = "menuimgs.item(i).style.width = '32px';"; menuimgs.item(i).onmousemove = "getLink(links,menuimgs.item(i),i2);"; |
Как узнать item() елемента?
|
Цитата:
по моему надо menuimgs[i] кстати зачем у Вас i2 если она меняется так же как i |
Цитата:
Цитата:
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. А вот тут и ошибочка. Почему? Ответ прост : Пример кода в тему : var foo = "foo"; (function () { var bar = "bar"; try { new Function("", "alert(foo + bar)")(); } catch (e) { alert(':)'); } })(); Как решить? подсказка : обработчики событий - это функции, а не строки :) |
Цитата:
Джаваскрипт не умеет преобразовывать строку в функцию. Если событию присвоить строку, то IE 9 так и записывает эту строку, но обработчик события не вызывается. FF и Chrome записывают туда null. <!DOCTYPE html> <html><head><title></title></head><body> <script type="text/javascript"> onload="alert(1);"; alert(onload); </script> </body></html> Ред: есть проблема с отображением этого кода: в IE 9 если его запускать из сообщения, то показывает "null", а когда на отдельной странице, то "alert(1);", я не знаю в чём причина, так как не разбирался, как работает эта фича просмотра на сайте. |
Цитата:
i2 здесь меняется не так как i, а только когда menuimgs.item(i).getAttribute("text") != null |
Цитата:
|
Цитата:
хм. я так раньше где-то услышал. |
Часовой пояс GMT +3, время: 14:36. |