|
В этот раз камнем преткновения стало событие onmouseover, которое в 4ом Нетскейпе обрабатывается только 2мя тэгами <a> (или <area>) и <layer>.
А задача состояла в том, чтобы при наведении курсора на текст в первой ячейке, менялось содержимое ячейки номер два.
Решение вначале было очевидным, но написав часть кода, которая выполняла задачу в IE на «ура», и приступив к написанию NN4-части я столкнулся с проблемой. Как уже говорилось выше, в NN4 onMouseOver понимают лишь <a> и <layer>. Но <layer> как написано в документации, создает слой с position: absolute, если же нам нужен «relative»-слой, то нужно воспользоваться специально предназначенным для этого тэгом <ilayer>. И там же говорилось, что оба эти тэга идентичны, но за исключением лишь одного: один - relative, другой - absolute (в доке даже не было разделения на layer / ilayer и описание было одно на оба тэга).
Практика же показала, что эта «идентичность» не совсем стопроцентная :)
Выяснилось, что <ilayer> понимает лишь одно единственное событие onLoad! Никаких onMouseOver'ов!!
Тут сложилась какая-то непонятная ситуация, с одной стороны в доке говорится что onmouseover понимают лишь <a> и <layer>, и, соотвественно, понимания в ilayer никто не обещал, с другой говорится что <layer> и <ilayer> одно и тоже, хотя на практике оказывается, что далеко нет. В общем и не подкапаешься, и не сделаешь все как надо. Но мне-то от этого не легче - сроки то горят, задачу нужно выполнять.
Признаюсь, я люблю извращения, но не настолько, чтобы ради одного единственного onMouseOver считать координаты ячейки, а потом вписывать в эту ячейку свежесозданный layer'ом слой, который-таки будет реагировать на onMouseOver (как считать координаты ячейки и заполнять ее, подробно расписано в статье «Как сделать текстовый rollover»).
После получения этой противоречивой информации проблема свелась к следующему: как заставить <layer> быть не «absolute», а быть «relative», или как заставить <ilayer> понимать onMouseOver. Одно из двух. После абсолютно бесплодных попыток указать стилями тэгу «layer», где ему жить, я решил подойти с другого конца, а именно, заставить <ilayer> понимать onMouseOver. К сожалению ни то, ни другое не удалось. Не удалось еще много чего.
Но одно из многих извращений, которые не сработавали, а именно:
 |
<a href="#" onmouseover="alert('test')"><td>text</td></a> |
 |
(к слову сказать, работающее в IE5), натолкнула меня на мысль, после чего решение проблемы было придумано в течении 20 минут.
Победоносный код выглядел так:
 |
<td><ilayer><layer onmouseover="alert('ура-ура!')">здесь текст</layer></ilayer></td> |
 |
Задача решалась на все 100%. «Текст» лежал в слое, который был «relative» (и все это было в нужном месте - внутри ячейки), но самое главное, эта конструкция реагировала на onMouseOver! Ура! ;)
Омрачило лишь одно: после создания этого шедевра, я почувствовал себе гением, и решил посмотреть, а может я действительно гений? Оказалось мне еще расти: Яндекс на запрос «ilayer layer onmouseover» выдавал 1222 страницы, а на первом месте стояла страница с конструкцией на 100% повторяющей только что придуманную мной (ну только слова «ура-ура» и «здесь текст» были там соотвественно другие ;)...
Обсудить в форуме
Москва, 1 декабря 2001 |
Денис «d0Rk» Авраамов |
|