Я очень люблю мозиллу, и часто люблю программировать в HTML недавно перешёл а работу со слоями.
Написал, как мне кажется, вполне сносый обработчик (не без помощи конечно :) ), который будет в любом браузере, работать и слои будут функционировать нормально. но я никак не ожидал, что браузера, ещё и по своему определяют переменные????

Здесь, я описываю обработчик, который определяет,что за браузер, и вписывает в переменную, именно ту команду работы, со слоем, которую сам же и поймёт...

Выделить код

Код:

<!-- ////////////////////////////////////////////Определяем браузер/////// -->
<map id="browser" /''name="firefox" /""name="sleipnir_gecko" "name="safari" ""name="konqueror" /name="ie" name="opera" name="lynx"> </map>
<script>
<!--
var browser_name=" "//Имя браузера, в которо открыта эта страница
var gpb=" " //глобальная переменная браузеров нужна для того, чтобы можно было обращаться правильно с помощью обработчика браузера со слоями и объектами

browser_name = document.getElementById('browser').getAttribute('name');//узнаём, что за браузер

if(browser_name == "firefox")(gpb = document.getElementById )
//if(browser_name == "sleipnir_gecko")(gpb =  )
//if(browser_name == "safari")(gpb =  )
//if(browser_name == "konqueror")(gpb =  )
if(browser_name == "ie")(gpb = document.all ) // Internet Explorer
if(browser_name == "opera")(gpb = document.getElementById ) // Opera
//if(browser_name == "lynx")(gpb =  )
//-->
</script>
<!-- //////////////////////////////END////////////////////////////////// -->

Тут, я представляю, часть кода, где при наведении на один слой мышкой, другой слой, меняет свои коардинаты. И он их меняет. в множестве браузеров.
А в мозилле, нет. Пока в место (gpb) не в пишешь (document.getElementById).

Выделить код

Код:

<!-- ***********************************---МЕНЮ---************************************************************* -->
<DIV id="1000" class="menu0" style="z-index:1000;" onMouseover="gpb('800').style.left=150"> 
  
 <!-- ПЕРВАЯ КОЛОНКА МЕНЮ -->
 <div id="800" class="menu1" style=" z-index:900;"> <table width="150" border="1" cellspacing="" cellpadding=""><tr><td height="30" align="center"> <b>ГЛАВНАЯ</b> </td></tr></table> </div>  
 
</DIV>
<!-- ********************************************************************************************************** -->

вот такие пироги. Через переменную обращение к объекту никак. А на прямую всегда пожалуйста.

Может кто чего по советует..

Простите, но весь этот бред нужно выкинуть.
Во-первых, все браузеры понимают getElementById; во-вторых, style.left должно быть строкой с обязательным указанием единиц измерения, в третьих, id элементов не должен начинаться с цифры.

Итого, выглядеть ваш код должен примерно так

Выделить код

Код:

<div id="a1" onmouseover="document.getElementById('a2').style.left='150px'">
<div id="a2">....

Тема перенесена из форума «Firefox» в форум «Разработка».

Благодарю, за прямой, ответ. И правда, выкину половину, раз уже браузеры поумнели.

НО если я хочу использовать часть кода в переменных , что мне сделать тогда.
ведь, даже писанина по правилам. не приводит к результату.
Мозила (возможно) обрабатывает переменную, как строку, а значит, при вставке в обработчик, получится следующее:

Выделить код

Код:

<DIV id="a1000" class="menu0" style="z-index:1000;" onMouseover=""document.getElementById"('a800').style.left='150 px'">

или

Выделить код

Код:

<DIV id="a1000" class="menu0" style="z-index:1000;" onMouseover="'document.getElementById'('a800').style.left='150 px'">

Что само по себе обработчиком опеделяется, как невыполнимый код, а следовательно исключается из обработки.
Другого объяснения, этому, я пока не вижу.
Как мне поступить в этом случае, чтобы остальные браузеры, тоже не "ругались"

Может, есть в Ява определения типа переменной типа :

Выделить код

Код:

var operand_a:of string;
     operand_b:of smallint;
     operand_c:of char;
     operand_d:of просто обычный кусок кода, который надо вставить как он есть;

Уже становится интересно..:rolleyes:

Может вы лучше по-человечески объясните, что вам надо. Потому что в примерах выше написан очевидный бред.

И, кстати, единицы измерения должны писаться вплотную к значениям. Без пробелов.

Это не принципиально, сейчас все браузеры нормально понимают PX с Пробелом  он пишется или без

Мне конкретно надо, чтобы мозилла могла вместо

Выделить код

Код:

<DIV id="a1000" class="menu0" style="z-index:1000;" onMouseover="document.getElementById('a800').style.left='150px'">

Нормально обрабатывать такое

Выделить код

Код:

<script language="JavaScript" type="text/javascript">
var kkk="document.getElementById";
</script>

<DIV id="a1000" class="menu0" style="z-index:1000;" onMouseover="kkk('a800').style.left='150px'">
.....

Остальные браузера с этим работают. А как сделать чтобы работала мозилла...
Это реально???

var kkk=document.getElementById; // без кавычек.

Это не принципиально, сейчас все браузеры нормально понимают PX с Пробелом  он пишется или без

Если в Quirks mode, то да. Но за квиркс в 2009 году надо больно бить.

var kkk=document.getElementById; // без кавычек.

Это положение проблемы не меняет.

Пробовал и с кавычками, и без ковычек,
всё равно ничего путнего не выходит.
Я думаю, это баг построителя HTML разметки

mulder
Ссылку на тестовую страницу с багом, и с гарантией 99.9% я найду на ней ошибку. Например, вы пытаетесь обратиться к элементу, которого ещё не существует.

Ссылку на тестовую страницу с багом

http://narod.ru/disk/9786364000/menu.html.html

При наведении на  "меню№1", должна "меню №2" отпрыгивать в право.

Прошу. Жду с нетерпением результата.

Если не сильно вдаваться в подробности, то вы скопировали функцию, но не её контекст. А getElementById ожидает, что будет запущена в контексте документа, а не непоймичего (на самом деле window).

Если уж очень хочется зачем-то сделать алиас для getElementById, то можно написать так:

Выделить код

Код:

sss=function(id){return document.getElementById(id);}

Хотя я знаю зачем это может быть нужно.

И почитайте по функции и методы в JS и как они работают.

P.S. Пишите единицы измерения!

Благодарю, мне теперь всё стало ясно.:D

А я то думал, что это в яве прикол такой функции без вводных переменных обозначать.
Пишу, и думаю... ну почему в делфи есть процедуры, и есть Функции. А в яве, всё всё через... .... функции
и всё только на глобальных переменных построено. Непорядок.

Но теперь то я понимаю, что плагиат, создателей явы пользу приносит :) , в общем теперь я вижу много общего между двумя языками.

Большое вам, огромное СПАСИБО. :):);)

научи меня программироать я в этом полный ноль

03-07-2009 13:17:00
кто нибудь научите!!!!!!!!!!!!!!!!!!!

Для начала, скачай себе программу HTML Reader Я с неё начинал. Она вроде dream wawer только русская и бесплатная.
В ней уже много всего готового понатыкано, вставляй, и разбирай код.
Потом тебе обязательно помогут онлайн учебники, и электронные книги. Их ты тоже можешь найти в инернете, их тут валом.
Например http://www.postroika.ru/html/ Дальше сам... Удачи