Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.02.2010, 00:35
Новичок на форуме
Отправить личное сообщение для Arkaim Посмотреть профиль Найти все сообщения от Arkaim
 
Регистрация: 11.02.2010
Сообщений: 9

Написал функцию, а WebKit её не понимает
Здравствуйте, я только начал изучать JavaScript. И сразу же пришлось пробовать написать функцию, которая должна менять класс у элемента списка, тем самым достигается подсветка активного пункта меню. Принадлежность определяется по document.title. В Опере, Ослике 8 и Фоксе все работает замечательно, а в WebKit производных браузерах не хочет подсвечиваться активное меню, т.е. само меню формируется, но подсветка не работает. Из всех вариантов решения данного вопроса на JavaScript, заработал только этот. Привожу сам код:
в HTML:
<div id="mainmenu">
        <script type="text/JavaScript" src="/lib/tpl/mysite/js/mainmenu.js"></script>
</div>


Сама функция (для краткости привожу два пункта меню, всего их 6):
titArray = new Array()
			titArray [0] = "Главная [Мой сайт]"
			titArray [1] = "Блог [Мой сайт]"
			titArray [2] = "Проект [Мой сайт]"
			
			urlArray = new Array()
			urlArray [0] = "/start"
			urlArray [1] = "/blog"
			urlArray [2] = "/projects"
			
			mnuArray = new Array()
			mnuArray [0] = "<span>Главная</span>"
			mnuArray [1] = "<span>Блог</span>"
			mnuArray [2] = "<span>Проект</span>"
         
         var libegin = "<li>"
			var lnk1 = "<a href='"
			var lnk2 = "' class='unactive' target='_parent'>"
			var lnk22 = "' class='active' target='_parent'>"
			var lnk3 = "</a>" 
			var liend = "</li>"
		  document.write("<ul class='menu'>")
        if (document.title == titArray[0])
        {document.write(libegin+lnk1+urlArray[0]+lnk22+mnuArray[0]+lnk3+liend)}
        else
        {document.write(libegin+lnk1+urlArray[0]+lnk2+mnuArray[0]+lnk3+liend)}
        
        if (document.title == titArray[1])
        {document.write(libegin+lnk1+urlArray[1]+lnk22+mnuArray[1]+lnk3+liend)}
        else
        {document.write(libegin+lnk1+urlArray[1]+lnk2+mnuArray[1]+lnk3+liend)}

        if (document.title == titArray[2])
        {document.write(libegin+lnk1+urlArray[2]+lnk22+mnuArray[2]+lnk3+liend)}
        else
        {document.write(libegin+lnk1+urlArray[2]+lnk2+mnuArray[2]+lnk3+liend)}


Подскажите в чем может быть проблема? Возможно есть более элегантный вариант решения?
Ответить с цитированием
  #2 (permalink)  
Старый 12.02.2010, 02:41
Аспирант
Отправить личное сообщение для sergdev Посмотреть профиль Найти все сообщения от sergdev
 
Регистрация: 08.12.2009
Сообщений: 32

Может у вас проблема со стилями какая то , не думаю что проблема в джаваскрипте. Если вы будете любезны дать ссылку(на ваш работающий "скрипт/страницу"), то может посмотримс
Ответить с цитированием
  #3 (permalink)  
Старый 12.02.2010, 09:16
Новичок на форуме
Отправить личное сообщение для Arkaim Посмотреть профиль Найти все сообщения от Arkaim
 
Регистрация: 11.02.2010
Сообщений: 9

Да вроде проверял стили - валидацию проходят. Ссылки нет к сожалению, поскольку сайт еще в разработке и пока на локальном компьютере. Если необходимо, то могу привести кусок CSS кода отвечающий за меню.
Ответить с цитированием
  #4 (permalink)  
Старый 12.02.2010, 09:49
Аспирант
Отправить личное сообщение для sergdev Посмотреть профиль Найти все сообщения от sergdev
 
Регистрация: 08.12.2009
Сообщений: 32

Хм. А как связано то, что они проходят валидацию с кроссбраузерностью ? Не вижу никакой связи. То что они соответствуют стандартам, не говорит о том, что они грамотно написаны
Ответить с цитированием
  #5 (permalink)  
Старый 12.02.2010, 10:05
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от Arkaim Посмотреть сообщение
Подскажите в чем может быть проблема? Возможно есть более элегантный вариант решения?
точно есть, все переписывать лень, привожу начало рефакторинга:
var a;
a= [
{ razdel:"Главная [Мой сайт]",url:"/start",span:"<span>Главная</span>" },
{ razdel:"Блог [Мой сайт]",url:"/blog",span:"<span>Блог</span>" },
{ razdel:"Проект [Мой сайт]",url:"/projects",span:"<span>Проект</span>" }
];
alert(a[1].url);
//далее все выбросить что было написано и пойти читать про работу с DOM

http://javascript.ru/tutorial/dom/modify

http://javascript.ru/tutorial/dom

Последний раз редактировалось Gozar, 12.02.2010 в 10:11. Причина: добавил пример :)
Ответить с цитированием
  #6 (permalink)  
Старый 12.02.2010, 13:31
Новичок на форуме
Отправить личное сообщение для Arkaim Посмотреть профиль Найти все сообщения от Arkaim
 
Регистрация: 11.02.2010
Сообщений: 9

sergdev, по идее браузеры должны соответствовать стандартам, то что существуют проблемы движка Ослика и мелкие у других, это я знаю. Дело в том что на событие hover тоже висит подсветка активного пункта меню и она работает во всех браузерах. Отсюда делаю вывод что проблемы со скриптом.
Gozar, спасибо буду читать и пробывать.
Ответить с цитированием
  #7 (permalink)  
Старый 12.02.2010, 13:33
Аспирант
Отправить личное сообщение для sergdev Посмотреть профиль Найти все сообщения от sergdev
 
Регистрация: 08.12.2009
Сообщений: 32

Сообщение от Arkaim Посмотреть сообщение
sergdev, по идее браузеры должны соответствовать стандартам, то что существуют проблемы движка Ослика и мелкие у других, это я знаю. Дело в том что на событие hover тоже висит подсветка активного пункта меню и она работает во всех браузерах. Отсюда делаю вывод что проблемы со скриптом.
Gozar, спасибо буду читать и пробывать.
Попробуйте взять хтмл просто написать и проверить во всех браузерах и так узнаете где проблема.
Ответить с цитированием
  #8 (permalink)  
Старый 12.02.2010, 16:08
Новичок на форуме
Отправить личное сообщение для Arkaim Посмотреть профиль Найти все сообщения от Arkaim
 
Регистрация: 11.02.2010
Сообщений: 9

sergdev, благодарю! Тоже идея, вечером буду пробовать...
Ответить с цитированием
  #9 (permalink)  
Старый 12.02.2010, 17:35
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Сообщение от Arkaim Посмотреть сообщение
sergdev, благодарю! Тоже идея, вечером буду пробовать...
чего тут пробовать, нужно как я сказал выбросить то что ниже определения объекта для меню и менять класс так:
element.style.className = 'active';

не надо там никаких document.write(), нужно прочитать как работают с DOM.
Ответить с цитированием
  #10 (permalink)  
Старый 12.02.2010, 17:38
Аспирант
Отправить личное сообщение для sergdev Посмотреть профиль Найти все сообщения от sergdev
 
Регистрация: 08.12.2009
Сообщений: 32

Сообщение от Gozar Посмотреть сообщение
чего тут пробовать
Я согласен с твоим сообщением, НО речь идет уже о принципе. Человек начал изучать джаваскрипт, в первом моем сообщение здесь я хотел ему посоветовать вообще не привязываться к document.title, ведь все это можно сделать как минимум на server-side языке. Это если говорить о правильном подходе, но думаю, что человек загнется если для того, чтобы показать какое то несчастное меню, нужно будет еще и пхп юзать и тд. Без обид, но подозреваю, что человек мало имеет представления вообще о программировании. Пусть учится отлавливать проблемы, etc. Я так понимаю, что это ж в образовательных целях. Вряд ли он бы взял коммерческое задание, будучи еще не профессионалом.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как изментить функцию прямо из кода!! magavnuk Events/DOM/Window 2 27.12.2009 10:33