Jump to content

Zeroglif

User
  • Posts

    46
  • Joined

  • Last visited

Everything posted by Zeroglif

  1. Вс?-таки вы афишируете сво? решение на публичном форуме, нужно предполагать и копипаст, и слабый анализ, а вы могли бы запросто обойтись без вычленения IE таким способом. Запросто. Не подавая другим плохой пример. IE6 тоже старь?. IE7 в смысле BOM/DOM/Javascript почти такое же старь?. Много чего нового не держит, но нельзя же из принципа отказывать их пользователям в рабочем скрипте. А в обсуждаемом контексте поддержка потребовала бы от вас всего 2-х строчек. Кстати, если говорить не о старье, а о потенциальном свежаке, то как насч?т занятого вами идентификатора getElementsByClassName, который в перспективе забивать не хотелось бы... Не проще ли взять другой ограничитель, как это делает подавляющее большинство. Нет? Думаю, вы просто не держали этого в уме. Скорость циклов разнится от браузера к браузеру. Если уж это так важно, то while был бы достаточен, do предполагает разовое действие вне условий, что совершенно тут не к месту пришлось. Я не прав? Поясните, конечно. Тоже поясните, не заметил. Дописав класс, мы ж не удаляем прежний. Ищется как всегда, анализируя className, ничего необычного. В рамках этого конкретного мира табов это константа, другое дело, что сам мир не инкапсулирован, все тяготы и лишения несут на своих плечах ноды. Смайлик погрустнел бы, зная вы сколько раз мне пришлось ответить по поводу этого бага. Правила именования тут вообще-то не при ч?м. Я вам говорил о конкретном баге IE (частично и Оперы тоже) плюс о том, что в среде js-программистов есть некие красные флажки, бессмысленное "неявное заведение переменных" - один из них. Бажность характеризуется наличием багов, нетривиальность малой распростран?нностью методов. Разве вы не можете вызвать нужную функцию переключения таба? Ни них же уже висят обработчики. Вот их и вызывайте. И я про это. Реальной проверки чего-либо нет, но есть для галочки, чтоб не пугались... Скрипт привязан к точке, а не к событию, модификация HTML может смещать точку, нужно за эти следить и проч. отвлеч?нные предметы. "Плохость" в том, что это слабо сочетается с такими важными словами, как "компонента", "отделение от содержания", "корректное взаимодействие обработчиков", "современный код" и т.д.. В общем смысле у inline-обработчиков масса малоизвестных неприятных особенностей, но они вполне себе работоспособны. Javascript вообще язык всепрощающий, можно писать допотопно, архаично, с запутанной логикой и прийти к нужному результату. В этом смысле опираться только на результат, как на критерий правильности не совсем верно, тем более на узком js-форуме, где нужно спорить идеями, логикой и качеством знаний. Двух достаточно. p.s. в принципе согласен про уровень абстракции, только на мой взгляд вы слишком расслабляете табы, им незачем так расслабляться, их роль и взаимодействие должны быть заранее определены и в какой-то степени зафиксированы...
  2. Прокомментирую-ка я некоторые грабли в вашем скрипте: для отсечения IE используется банальный navigator.userAgent.indexOf("MSIE"), то есть любители по-spoof-ить свои юзерагенты заранее идут лесом; метод getElementsByTagName('*') предполагает, что IE ниже шестой версии отдыхает; метасимвол b в регулярном предполагает, что имена классов с дефисами внутри прид?тся выбирать более внимательно; do-while предполагает, что при начальном индексе (i), равном нулю, мы можем уплыть в светлую даль вечного loop-a, и почему именно do, и почему снизу; ноды засоряются ненужными данными, которые легко можно держать снаружи (там прилинкован зачем-то свой же родитель, имя собственного же класса, да болтающийся текст activeTab и т.д.); все функции заведены неявно (не объявлены или без var), что чревато конфликтами в IE (возможное совпадение им?н в глобальном констексте) и вообще это не комильфо, в принципе; очень сомнительна необходимость в нетривиальных и бажных dispatchEvent/fireEvent для такой примитивной задачи, как клик по табу; повсюду натыканы try-catch, но реальная проверка чего-либо вообще не производится;один кусок скрипта во внешнем файле, другой в html, первоначальная инициализация не по загрузке, а по месту скрипта в потоке, обработчики заведены архаично в тегах... и т.д. и т.п., общую логику даже не беру в расч?т... Если стояла задача написать качественный/reuse-ный/командный/кроссбраузерный/масштабируемый код, то вряд ли. А если ещ? и предположить, что это код коммерческий, то тут пахнет выговором от босса, как минимум...
  3. Кавычек не хватает, возвращаясь к начальному примеру, первый раз при наведении вы переда?те в функцию строку 'p', а дальше setTimeout запускает код, где уже не строка, а переменная p, значением которой является объект (или вообще несуществующая переменная, зависит от браузера, не суть важно), нужно просто написать так: setTimeout("tt('"+a+"')",100);
  4. В IE третьим опциональным аргументом ид?т название языка: iTimerID = window.setTimeout(vCode, iMilliSeconds [, sLanguage]) http://msdn2.microsoft.com/en-us/library/ms536753.aspx
  5. Нет такой книги в природе. Но есть, к примеру, неплохая песочница про ООП во Flash: http://oflesh.by.ru/index.htm И есть множество статей/обзоров, по которым, в принципе, можно разобраться в предмете: http://forum.vingrad.ru/index.php?showtopi...dpost&p=1215304
  6. ? убирает "жадность" квантификаторов иначе если в примере скриптовых блоков несколько, то они сольются в один (от первого тега первого блока до последнего тега последнего, регулярное жадно вс? захватит)... ;-)
  7. nim, По поводу времени исполнения скрипта - если нужно что-то сделать по мере загрузки, то на это есть onload или же на крайний случай можно разместить скрипт где-то ниже элементов, с которыми предстоит работать скрипту. По поводу this - нужно вам просто поизучать это дело, в 2-х словах не объяснишь, в этом скрипте значением this является ссылка на окно (объект window), которому вы созда?те зачем-то свойство innerHTML, и смысла это не имеет вовсе. По поводу строительства таблицы через innerHTML - не лучшее решение, например, в IE таким образом таблицы не строят, надо по-другому.
  8. Tokolist уже вс? что нужно написал, вешайте обработчик на сам документ и ловите, допустим, тот же клик на любом элементе.
  9. var x; function f(){ x = this.id; } document.getElementById('foo').onclick = f;
  10. function setAtributes(e) { alert("Hello!"); e.preventDefault ? e.preventDefault() : e.returnValue = false; }
  11. Или как написал AKS поменять truе на false, или просто начать проверять с метода IE. function getA() { var t = document.getElementById("menu").getElementsByTagName('a'), l = t.length; while (l--) { //t[l].addEventListener ? t[l].addEventListener("click", setAtributes, false) : t[l].attachEvent("onclick", setAtributes); t[l].attachEvent ? t[l].attachEvent("onclick", setAtributes) : t[l].addEventListener("click", setAtributes, true); } }
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy