Не погу передать объект в IE с помощью this
Все доброго времени суток.
Тут на форуме нашел такую тему, в которой просят при клике увеличивать шрифт на сайте, я попробовал написать, написал, ну и уже как оч привычно, работает везде, кроме IE. Вот и пришел сюда за помощью. Укажи на мою ошибку, если такое возможно. Все скрипты ниже. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Увеличиваем шрифт</title> <style type="text/css"> body {font-size: 120%;} ul.changeFont {list-style: none;} ul.changeFont li { float: left; margin: 0 0 0 5px; } ul.changeFont li a { text-decoration: none; color: #082b25; } ul.changeFont li a:active {color: #ec0024} #small {font-size: 11px;} #big{font-size: 15px;} #bigger{font-size: 19px;} .spacer {clear: both;} #text {font-size: 14px;} .text_14px {font-size: 14px !important;} .text_17px {font-size: 17px !important;} .text_20px {font-size: 20px !important;} </style> </head> <body> <ul class="changeFont" id="changeFont"> <li id="small"><a href="javascript:void(0);">A</a></li> <li id="big"><a href="javascript:void(0);">A</a></li> <li id="bigger"><a href="javascript:void(0);">A</a></li> </ul> <br class="spacer" /> <div id="text"> Анонимные - доступны только с момента объявления. Синтаксис new Function используется редко, в основном для получения функции из текста, например, динамически загруженного с сервера в процессе выполнения скриптов. </div> </body> </html> Скрипт вставлял перед закрывающимся тегом body <script type="text/javascript"> // функция обрабатывающая клик font = function() { // получение элементов по которым будет кликать var mainUl = document.getElementById("changeFont").getElementsByTagName("LI"); // узнаем по какому элементу кликнули for (j = 0; j < mainUl.length; j ++) { if (mainUl[j].nodeName == "LI") { var Ulchild = mainUl[j]; // передачи идентификатора элемента по которому кликнули функции уведличивающей шрифт Ulchild.onclick = function() { changeFont(this.id) } // кстати вот этот элемент не могу передать в IE } } // загрузка куков cookieLoad(); } // ф-ция уведличивающая шрифт changeFont = function(elem) { // этому элементу далее будет устанавливатся атрибут для куков ** var change = document.getElementById("text"); // устанавливаю атрибут для увеличения шрифта switch(elem) { case "small": change.setAttribute("class", "text_14px"); break; case "big": change.setAttribute("class", "text_17px"); break; case "bigger": change.setAttribute("class", "text_20px"); break; } // ** if (change.getAttribute("class")) { var cookie = change.getAttribute("class"); cookieSet(cookie); } } // устанавливаю куки cookieSet = function(cookie) { if (navigator.cookieEnabled) { if (cookie != '') { cDate = new Date; cDate.setTime(cDate.getTime() + 3600000); rDate = cDate.toGMTString(); document.cookie = "c_name=" + cookie + "; expires=" + rDate + ";"; } cookieLoad(); } } // загружаю куки cookieLoad = function() { if (navigator.cookieEnabled) { if (document.cookie != '') { docCook = document.cookie.split('; '); docCook[0] = docCook[0].split('='); cAttr = docCook[0][1]; document.getElementById("text").setAttribute('class', cAttr); } } } // пытаюсь кросбраузерно запустить ф-цию font if (window.addEventListener) window.addEventListener("load", font, false); if (window.attachEvent) window.attachEvent("onload", font); </script> если вам не сложно укажите на ошибки. Заранее благодарен! |
1. перекинь скрипт в <head>
2. if (mainUl[j].nodeName == "LI") в этом нет смысла после var mainUl = document.getElementById("changeFont").getElementsB yTagName("LI"); рабочий код: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Увеличиваем шрифт</title> <style type="text/css"> body {font-size: 120%;} ul.changeFont {list-style: none;} ul.changeFont li { float: left; margin: 0 0 0 5px; } ul.changeFont li a { text-decoration: none; color: #082b25; } ul.changeFont li a:active {color: #ec0024} #small {font-size: 11px;} #big{font-size: 15px;} #bigger{font-size: 19px;} .spacer {clear: both;} #text {font-size: 14px;} .text_14px {font-size: 14px !important;} .text_17px {font-size: 17px !important;} .text_20px {font-size: 20px !important;} </style> <script type="text/javascript"> font = function () { var mainUl = document.getElementById("changeFont").getElementsByTagName("LI"); for (j = 0; j < mainUl.length; j++) mainUl[j].onclick = function () { changeFont(this.id) }; cookieLoad() }; changeFont = function (elem) { var change = document.getElementById("text"); switch (elem) { case "small": change.setAttribute("class", "text_14px"); break; case "big": change.setAttribute("class", "text_17px"); break; case "bigger": change.setAttribute("class", "text_20px"); break } if (change.getAttribute("class")) { var cookie = change.getAttribute("class"); cookieSet(cookie) } }; cookieSet = function (cookie) { if (navigator.cookieEnabled) { if (cookie != "") { cDate = new Date; cDate.setTime(cDate.getTime() + 36E5); rDate = cDate.toGMTString(); document.cookie = "c_name=" + cookie + "; expires=" + rDate + ";" } cookieLoad() } }; cookieLoad = function () { if (navigator.cookieEnabled) if (document.cookie != "") { docCook = document.cookie.split("; "); docCook[0] = docCook[0].split("="); cAttr = docCook[0][1]; document.getElementById("text").setAttribute("class", cAttr) } }; if (window.addEventListener) window.addEventListener("load", font, false); else if (window.attachEvent) window.attachEvent("onload", font); </script> </head> <body> <ul class="changeFont" id="changeFont"> <li id="small"><a href="javascript:void(0);">A</a></li> <li id="big"><a href="javascript:void(0);">A</a></li> <li id="bigger"><a href="javascript:void(0);">A</a></li> </ul><br class="spacer"> <div id="text"> Анонимные - доступны только с момента объявления. Синтаксис new Function используется редко, в основном для получения функции из текста, например, динамически загруженного с сервера в процессе выполнения скриптов. </div> </body> </html> |
Вечно у меня возникает проблема с местом подключения скрипта. То нужно подключить до того как дум выстроится, то после.
Спасибо огромное за быстрый ответ! |
Часовой пояс GMT +3, время: 16:34. |