Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Веб-мастер
 Аватар для Maksimchikfull
89 / 89 / 19
Регистрация: 11.08.2011
Сообщений: 674

Жалуется на не существование переменной

03.07.2012, 18:15. Показов 1732. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
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++;
        }
    }
}
Жалуется на то что не существует menuimgs.

Я в JS плохо понимаю, прошу помощи. ^_^

Добавлено через 2 часа 32 минуты
Разобрался.

Мне надо чтобы изображения в меню увеличивались в зависимости от положения курсора. Например есть 4 изображения:

PHP
1
2
3
4
echo "<img src='/images/menu/index.png' name='link' text='Главная' width='32'>\n";
echo "<img src='/images/menu/login.png' name='link' text='Вход' width='32'>\n";
echo "<img src='/images/menu/reg.png' name='link' text='Регистрация' width='32'>\n";
echo "<img src='/images/menu/rating.png' name='link' text='Рейтинг' width='32'>\n";
И если навести на вторую, то она должна увеличится до 64 пикселей, а которые рядом до 48.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.07.2012, 18:15
Ответы с готовыми решениями:

Проверка на существование переменной
Всем доброго времени суток! Подскажи существует ли в JS аналог проверки на существование переменной как например в PHP ...

Проверка переменной на существование
Как в python'е проверить переменную на существование? Мне нужно записать вот такой код на python'е: if(isset($a)) $a.=' '; else ...

Проверка на существование переменной
Как лучше проверять существует ли переменная или не пустая ли она? Вот так if(isset($a) &amp;&amp; !empty($a)) { } или...

10
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
03.07.2012, 20:57
попробуй это
Цитата Сообщение от Maksimchikfull Посмотреть сообщение
menuimgs.item(i)
заменить на это
JavaScript
1
menuimgs[i]......


Цитата Сообщение от Maksimchikfull Посмотреть сообщение
menuimgs.item(i).onmouseout = "menuimgs.item(i).style.width = '32px';";
menuimgs.item(i).onmousemove = "getLink(links,menuimgs.item(i),i2); ";
событию нужно функцию присваивать, а не строку
1
Веб-мастер
 Аватар для Maksimchikfull
89 / 89 / 19
Регистрация: 11.08.2011
Сообщений: 674
03.07.2012, 21:33  [ТС]
newJS, спасибо. Но я уже достиг того что хотел. И теперь пытаюсь без jQuery сделать плавное увеличение.

Хотя есть одно НО. Как в jQuery.animation() сделать выполнение один раз? То если onmouse(over && out) поставить и водить по объекту 100 раз. То он будет все 100 раз использовать animation хотя мышка уже давно перестал мышкой наводить.
0
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
04.07.2012, 07:44
Цитата Сообщение от Maksimchikfull Посмотреть сообщение
И теперь пытаюсь без jQuery сделать плавное увеличение.
это



Цитата Сообщение от Maksimchikfull Посмотреть сообщение
Как в jQuery.animation() сделать выполнение один раз?
Не надо всякое Г. использовать, нужно на нормальном js писать, тогда будешь знать, что делаешь.
1
Веб-мастер
 Аватар для Maksimchikfull
89 / 89 / 19
Регистрация: 11.08.2011
Сообщений: 674
04.07.2012, 10:51  [ТС]
newJS, я подобное нашел.

Добавлено через 33 минуты
Но как тут передать переменные в функцию? Разве они уже не глобальные для таймаута?

JavaScript
1
2
3
4
5
6
7
8
9
10
for(var i = element, newWidth = 64; i >= 0 && newWidth != 32; i--, newWidth -= 8){
    alert(i +" "+ newWidth); // 0 64
    var tId = setTimeout(function(i,newWidth){
        alert(i +" "+ newWidth); // undefined undefined
        links.item(i).style.width = (links.item(i).offsetWidth+1)+"px";
        if(links.item(i).offsetWidth != newWidth){ setTimeout(arguments.calle,10); }
        else{ clearTimeout(tId); }
    },
    10);
}
Добавлено через 57 минут
Хотя если подумать, то логика неверная. ^_^
0
Веб-мастер
 Аватар для Maksimchikfull
89 / 89 / 19
Регистрация: 11.08.2011
Сообщений: 674
05.07.2012, 19:51  [ТС]
UP UP UP!

Не могу понять, почему ошибка:
[05.07.2012 18:52:10] JavaScript - http://localhost/index.php
Event thread: mouseout
Uncaught exception: TypeError: Cannot convert 'menuLink' to object
Error thrown at line 32, column 2 in <anonymous function: onmouseout>() in http://localhost/js/header.js:
for(i = 0; i <= menuLink.length; i++)
В этом коде:
JavaScript
1
2
3
4
5
6
7
    document.getElementById('main_menu').onmouseout = function(){
        var menuLink = document.getElementsById('menuLink');
                      alert(menuLink); // Возвращает NULL. Строка выше создает menuLink.
        for(i = 0; i <= menuLink.length; i++){ // <<<===== Вот тут. Не работает menuLink.length
            menuLink[i].style.width = "32px";
        }
    };
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
06.07.2012, 04:27
Maksimchikfull, будьте внимательнее: document.getElementsById - неверно, такого метода нет. Правильно будет document.getElementById

По определению (в версии JScript) метод document.getElementById при наличии любого количества тегов с одинаковыми id возвращает только один - первый в коде.
Соответственно, цикл в MSIE по-любому сработает только один раз.
0
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
06.07.2012, 07:23
Да какая разница, есть там эта буковка или нет.
Товарищ пытается получить массив элементов вообще не тем методом.
JavaScript
1
.getElementsByTagName("имя тега");
Вот тут есть та самая буковка.

поиск в некотором контейнере
JavaScript
1
document.getElementById("").getElementsByTagName("");
во всем документе
JavaScript
1
document.getElementsByTagName("");
в названии метода явно указано, получить элементы по имени тега


Maksimchikfull, поставь нормальный редактор с подсветкой



Цитата Сообщение от kalabuni Посмотреть сообщение
Соответственно, цикл в MSIE по-любому сработает только один раз.
это?
JavaScript
1
menuLink[i].style.width = "32px";
а с какого перепугу? элемента то нет! чему тут срабатывать?
да и ошибка строкой выше просто не позволит дойти до этой строки
откуда здесь массив?
JavaScript
1
menuLink.length;
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
06.07.2012, 12:26
newJS, прежде чем делиться со всеми своими врождёнными страхами, перечитайте мною написанное.
А именно:
- если неверный метод (с линей буквочкой s в середине) заменить на верный;
- если в документе имеется много тегов одинаковым id
то вот ТОГДА по-любому в браузере MSIE цикл сработает всего один раз.
0
Веб-мастер
 Аватар для Maksimchikfull
89 / 89 / 19
Регистрация: 11.08.2011
Сообщений: 674
06.07.2012, 14:27  [ТС]
kalabuni, newJS, вынужден вас огорчить. Но такое метод ЕСТЬ!

Он есть потому что он был создан, я о нем ничего не сказал поскольку думал что он не важен. То как это получалось? Что в первый момент переменной menuLink все присвоилось, а чуть мозже уже ничего не присваивалось.

На данный момент весь код работает корректно во всех браузерах.

Представляю:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    var el = document.getElementById(id);
    if(!el) return el;
    var els = document.getElementsByTagName(el.tagName), i = 0, res = [];
    while(els[i]){
        if(els[i].id == id) res.push(els[i]);
        i++;
    }
    return res;
};
 
document.body.onload = function(){
    var menuLink = document.getElementsById('menu_link');
    document.getElementById('main_menu').onmouseout = function(){
        document.getElementById('get_link_info').style.display = "none";
        for(i = 0; i < menuLink.length; i++){
                menuLink[i].style.width = "32px";
        }
    }
    for(i = 0; i < menuLink.length; i++){
        menuLink[i].id = i;
        menuLink[i].onmousemove = function(){
            for(i = this.id, newWidth = 64; i >= 0; i--, newWidth -= 8){
                menuLink[i].style.width = newWidth +"px";
            }
            for(i = this.id, newWidth = 64; i < menuLink.length; i++, newWidth -= 8){
                menuLink[i].style.width = newWidth +"px";
            }
            var getLinkInfo = document.getElementById('get_link_info');
            getLinkInfo.style.display = "inline";
            getLinkInfo.style.top = (this.offsetTop + this.offsetHeight + 2)+"px";
            getLinkInfo.style.left = (this.offsetLeft + document.getElementById('logotype').offsetWidth)+"px";
            getLinkInfo.innerHTML = this.getAttribute('alt');
        }
    }
};
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
06.07.2012, 16:01
Maksimchikfull, я всё-равно сильно огорчён.

Беспокоюсь за ваше психическое состояние.
Доказывать с пеной у рта, что "невозможное - возможно" - это удел психбольных, ну или, на крайний случай, Дебила Белана.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.07.2012, 16:01
Помогаю со студенческими работами здесь

Проверка на существование $_GET переменной
Допустим есть адрес: site.ru/index.php?module=user&amp;id=12&amp;action=edit&amp;section=tel Как проверить существуют ли все переменные...

Как определить существование переменной?
Допустим, объявляется переменная int x = 2. Как удалить эту переменную и как проверить существует ли она?

как коротко проверить существование переменной и соответствие её какому-либо значению?
Проверяю значение переменной &lt;? if($_REQUEST == 'Y'){ echo ' checked'; } ?&gt; Если переменная не установлена, то выдается...

На sizeof жалуется
Вот кода: #include &lt;iostream&gt; /* run this program using the console pauser or add your own getch, system(&quot;pause&quot;) or input loop */ ...

Жалуется на break
#include &lt;iostream&gt; using namespace std; int main() { cout &lt;&lt; &quot;Difficulty Levels\n\n&quot;; cout &lt;&lt; &quot;1 - Easy\n&quot;; cout &lt;&lt; &quot;2 -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru