![]() |
Модераторы: Sardar, Aliance |
![]() ![]() ![]() |
|
Ciber SLasH |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 24 Всего: 67 |
Приветствую всех!
Давно написал ф. для добавления правила в таблицу стилей и ф. работала. Но с какой-то версии FireFox перестала работать ф. и меню не отрабатывает. Подскажите пожалуйста, где ошибка в коде:
FF ругается в консоль так:
Это сообщение отредактировал(а) Ciber SLasH - 17.4.2014, 17:03 Присоединённый файл ( Кол-во скачиваний: 1 ) ![]() |
||||
|
|||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Использовать глобальную переменную menuElem в атрибутах обработчиков событий - не гуд. У меня на jsfiddle выдает как минимум эту ошибку.
|
|||
|
||||
Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 24 Всего: 67 |
Заменил в обработчиках событий глобальную переменную на document.getElementById("menu") и заработало, но в консоли всё равно ругается на 27 строку:
Хотя раньше и так работало. Видимо в новых версиях FF обработчики событий больше не видят глобальных переменных. |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Не то, чтобы это не правильно, но лично мне кажется нелогичным. Я бы посоветовал делать так:
в обработчики событий вешать функции (при чем лучше делать это именно inline, чтобы было сразу понятно что должно вызываться и когда), а в функции обращаться к единой переменной, которая просчитана один раз в закеширована (это может быть и глобальная, конечно, но лучше в качестве неймспейса завести некий объект и переменную хранить как его свойство). Выложи обновленный код на jsfiddle и посмотрим, что там за ошибка. |
|||
|
||||
Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 24 Всего: 67 |
Попробовал создать объект, на обработчики навесить функции - вообще перестало работать в FF 28.0
http://jsfiddle.net/YRNF9/2/ |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Ну а теперь открываем консоль по ссылке и видим ошибки:
Это потому, что в левом верхнем селекте нужно выбрать было не onload, а no wrap (лучше в body, но для примера все равно). После этого вроде как пример работает нормально, без ошибок. Только я бы посоветовал не извращаться и писать все атрибуты html в нижнем регистре, onClick выглядит ужасно. Но это лишь мое мнение ![]() |
|||
|
||||
Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 24 Всего: 67 |
Выбрал no wrap, изменил атрибуты в нижний регистр. В текущем состоянии:
|
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 55 Всего: 137 |
Какой браузер-то? В Хроме все окей. Видимо проблема в Лисе? Вообще, 194 строчка - это первая строчка в функции changeStyle. Может быть идет наведение мышкой ДО события onload? Тогда еще объект не успевает заинититься, и такая ошибка может возникнуть. Но это нормально. Не нормально то, что такая ситуация не обрабатывается внутри методов, навешанных на события.
А зачем вообще нужна функция changeStyle? Она, честно говоря, похода на огромный костыль. Что мешает просто написать нужные стили сразу и просто менять класс у элемента при взаимодействии с ним? Ну или второй вариант менять стили (elem.style.STYLE = 'VALUE')? И еще, я бы вот таких проверок не делал бы (curNode.nodeName == "LI"), ибо регистрозависимость есть зло. Лучше привести в нижний регистр и сравнивать с li. Кстати, чтобы работало \n - нужно его заключать в двойные кавычки. |
|||
|
||||
Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 24 Всего: 67 |
Браузер уже писал - FF 28.0
Остальное позже поковыряю... |
|||
|
||||
Ciber SLasH |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: 24 Всего: 67 |
Внутри методов повесил проверку: typeof(menuObj.menu) == "undefined"
Функция действительно костыль. Она и была написана, как костыль для разных браузеров. А по поводу \n ошибаешся - оно работает и в одинарных и в двойных кавычках в JS. Это у PHP в одинарных кавычках строка не вычисляется. А ошибка:
как выяснилось, означает, что insertRule не поддерживает мультистроки. Поэтому пршлось мультистроку css-правил разбивать на части:
Код по ссылке исправил. |
||||
|
|||||
![]() ![]() ![]() |
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |