Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Разночтения ie и ff / 5 сообщений из 5, страница 1 из 1
30.05.2009, 17:22
    #36017228
Индус
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разночтения ie и ff
Есть такой код для tooltip ссылок. В ie работает, в ff - нет. Где разночтения браузеров?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="tooltip._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <script type="text/javascript">
        function ietruebody() {
            return (document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body
        }

        if (!document.layers && !document.all)
            event = "test"
        function showtip2(current, e, text) {

            if (document.all && document.readyState == "complete") {
                document.all.tooltip2.innerHTML = '<marquee style="border:1px solid black">' + text + '</marquee>'
                document.all.tooltip2.style.pixelLeft = event.clientX + ietruebody().scrollLeft + 10
                document.all.tooltip2.style.pixelTop = event.clientY + ietruebody().scrollTop + 10
                document.all.tooltip2.style.visibility = "visible"
            }

            else if (document.layers) {
                document.tooltip2.document.nstip.document.write('<b>' + text + '</b>')
                document.tooltip2.document.nstip.document.close()
                document.tooltip2.document.nstip.left = 0
                currentscroll = setInterval("scrolltip()", 100)
                document.tooltip2.left = e.pageX + 10
                document.tooltip2.top = e.pageY + 10
                document.tooltip2.visibility = "show"
            }
        }
        function hidetip2() {
            if (document.all)
                document.all.tooltip2.style.visibility = "hidden"
            else if (document.layers) {
                clearInterval(currentscroll)
                document.tooltip2.visibility = "hidden"
            }
        }

        function scrolltip() {
            if (document.tooltip2.document.nstip.left >= -document.tooltip2.document.nstip.document.width)
                document.tooltip2.document.nstip.left -= 5
            else
                document.tooltip2.document.nstip.left = 150
        }

</script>
</head>
<body>


    <form id="form1" runat="server">
    <div id="tooltip2" style="position:absolute;visibility:hidden;clip:rect(0 150 50 0);width:150px;background-color:Yellow">
    <layer name="nstip" width=1000px bgColor="lightyellow"></layer>
    </div>
    <center>
		<a onmouseover="showtip2(this,event,'Visit Devasp for articles and much more!')" onmouseout="hidetip2()" href="http://www.devasp.com">Devasp</a><br/>
		<a onmouseover="showtip2(this,event,'Visit Yahoo for free mail account!')" onmouseout="hidetip2()" href="http://www.yahoo.com">Yahoo</a><br/>
		<a onmouseover="showtip2(this,event,'Visit MSN for free mail account and much much more things!')" onmouseout="hidetip2()" href="http://www.msn.com">MSN</a><br/>
		<a onmouseover="showtip2(this,event,'Visit Google for more space of mail account space !')" onmouseout="hidetip2()" href="http://www.google.com">Google</a><br/>
		
    </center>
    </form>
</body>
</html>
...
Рейтинг: 0 / 0
30.05.2009, 17:53
    #36017244
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разночтения ie и ff
Н-да, это прям больше похоже на какой-то клон языка, нежели на javascript ...

- хотя на отсутствие оканчивающих точек с запятой интерпретатор смотри спустя рукава, но все же очень советуется ставить их;
- document.all.xxxx и document.xxxx - так работает только ИЕ, для кроссбраузерности надо обращаться через id: getElementById();
- layer - пережиток прошлого, обычно используют див с абсолютным позиционированием и z-index;
- установка размерности допустима только в стилях, при указании атрибутов это всегда пиксели (или проценты), "px" ставить не надо;
- в стилях всегда надо ставить размерность (очень настоятельно советуется, чтобы не было разночтения браузерами);
- не староват ли доктайп?
...
Рейтинг: 0 / 0
30.05.2009, 19:28
    #36017286
Индус
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разночтения ie и ff
Учёл замечания и сократил до вот так. Пока всё также.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
<script type="text/javascript">
        function ietruebody() {
            return document.getElementsByTagName("body")
        }
        
        function showtip2(current, e, text) {

            
                document.getElementById("tooltip2").innerHTML = '<marquee style="border:1px solid black">' + text + '</marquee>';
                document.getElementById("tooltip2").style.pixelLeft = event.clientX + ietruebody().scrollLeft +  10 ;
                document.getElementById("tooltip2").style.pixelTop = event.clientY + ietruebody().scrollTop +  10 ;
                document.getElementById("tooltip2").style.visibility = "visible";
            
        }
        function hidetip2() {
            document.getElementById("tooltip2").visibility = "hidden";
            }
        

        function scrolltip() {
            if (document.getElementById("tooltip2").document.getElementById("nstip").left >= -document.getElementById("tooltip2").document.getElementById("nstip").document.width)
                document.getElementById("tooltip2").document.getElementById("nstip").left -=  5 
            else
                document.getElementById("tooltip2").document.getElementById("nstip").left =  150 
        }

</script>
...
Рейтинг: 0 / 0
31.05.2009, 01:21
    #36017426
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разночтения ie и ff
Из того, что снова увидел:

- ietruecbode() возвращает не элемент, а коллекцию элементов (из одного элемента);
- странно, что в функцию передается событие е, но работа ведется с объектом event;
- для кроссбраузерности объект event явно не передается, нужна проверка в функции типа такой if (!e) _e = event; и работать с переменной _e.

Похвально, что хочется все делать ручками, но достаточно удобно воспользоваться, скажем, jQuery, где одной функцией можно определить абсолютное положение объекта и туда вывести свой тултип. Или и вовсе воспользоваться готовыми решениями - кроссбраузерными, рабочими, правильными и красивыми.
...
Рейтинг: 0 / 0
01.06.2009, 11:29
    #36018529
зы
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разночтения ie и ff
Код: plaintext
document.getElementById("tooltip2").document.getElementById("nstip").left
хрень какая
...
Рейтинг: 0 / 0
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Разночтения ie и ff / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]