webForumDet fria alternativet

Fel med layer och NS

9 svar · 229 visningar · startad av Vide

VideMedlem sedan dec. 19998 577 inlägg
#1

Tjena,

Jag får felmeddelandet:
document.layers[strLay] has no properties

På koden:

	function change_layer(strLay, bolShow)
        {
        w = 650;
        h = 320;
        if (document.all)
        {
                document.all[strLay].style.visibility = bolShow;
                document.all[strLay].style.pixelLeft = w;
                document.all[strLay].style.pixelTop = h;
        }
        else if (document.layers)
        {
                document.layers[strLay].visibility = bolShow;
                document.layers[strLay].left = w;
                document.layers[strLay].top = h;
        }
        else if (document.getElementById)
        {
                document.getElementById(strLay).style.visibility = bolShow;
                document.getElementById(strLay).style.left = w;
                document.getElementById(strLay).style.top = h;
        }
	}

Jag är ju ingen kung på javascript, så felet är säkert enkelt... ;)

Mvh, Vide

------------------
Doesn't 'expecting the unexpected' make the unexpected expected?
webeye.nu

VoltaMedlem sedan okt. 200117 inlägg
#2

Jag är inte mästare på Netscape men jag har ett förslag. I Netscape 4.x måste en DIV tagg ha attributet STYLE="position: absolute;" för att tolkas som ett lager. Koden blir alltså följande.

<DIV STYLE="position: absolute;">Lagrets innehåll</DIV>

Om detta inte löser problemet kanske du ska titta in på javascript.nu.

------------------
Copyright © 2001, av Ted Johansson för apelgren.cjb.net.

[Redigerat av Volta den 04 okt 2001]

VideMedlem sedan dec. 19998 577 inlägg
#3

Hejsan!

Jo, det har jag... jag kan lägga in den kod jag har för mitt layer:

<div id="textblock_asp" style="position:absolute;" onmouseover="change_layer('textblock_asp', 'visible');" onmouseout="change_layer('textblock_asp', 'hidden');">
<table width="170" border="1" bordercolor="#000000" cellspacing="0" cellpadding="2" class="bgrnd">
	<tr>	
		<td width="170" align="left">
			<%=strASPartikles%>
		</td>
	</tr>
</table>
</div>

Felmeddelandet pekar på denna raden:

function change_layer(strLay, bolShow)
{
w = 650;
h = 320;
if (document.all)
{
document.all[strLay].style.visibility = bolShow;
document.all[strLay].style.pixelLeft = w;
document.all[strLay].style.pixelTop = h;
}
else if (document.layers)
{
[b]document.layers[strLay].visibility = bolShow;[/b]
document.layers[strLay].left = w;
document.layers[strLay].top = h;
}
else if (document.getElementById)
{
document.getElementById(strLay).style.visibility = bolShow;
document.getElementById(strLay).style.left = w;
document.getElementById(strLay).style.top = h;
}
}

------------------
Doesn't 'expecting the unexpected' make the unexpected expected?
webeye.nu

VideMedlem sedan dec. 19998 577 inlägg
#4

Felet verkar ha varit att NS inte klarade av att det fanns ett "_" i namnet. :l

Men nu till ett följdproblem, hur får jag NS att behålla lagret när man har musen över lagret?

Kolla längst till höger under "Genvägar"... http://www.webeye.nu

------------------
Doesn't 'expecting the unexpected' make the unexpected expected?
webeye.nu

JojoxxMedlem sedan juni 20004 308 inlägg
#5

Netscape 4.x reagerar inte på events i <div>, men däremot på i <layer>. Du kan lägga <layer onMouseover="... direkt efter <div ...> och avsluta det med </layer> före </div>

------------------
/ J

VideMedlem sedan dec. 19998 577 inlägg
#6

Okej, men hur reagerar IE på att man har det i layer istället?

[r.] Inte "istället" förstås, men att man flyttar eventsen till layer.. ;)

------------------
Doesn't 'expecting the unexpected' make the unexpected expected?
webeye.nu

[Redigerat av Vide den 05 okt 2001]

JojoxxMedlem sedan juni 20004 308 inlägg
#7

I alla versioner jag har testat så struntar den i <layer> ...och som sagt, kopior av event-satserna, inte flytta :)

------------------
/ J

VideMedlem sedan dec. 19998 577 inlägg
#8

Det blir fel eftersom båda har samma id. Skall det vara så jobbigt att man måste ange att båda lagrena skall visas i onmouseover?

Verkar lite väl jobbigt för en så simpel grej...

------------------
Doesn't 'expecting the unexpected' make the unexpected expected?
webeye.nu

VideMedlem sedan dec. 19998 577 inlägg
#9

IE visa alla <layer>-taggar också... så den lösningen gick inte...

------------------
Doesn't 'expecting the unexpected' make the unexpected expected?
webeye.nu

JojoxxMedlem sedan juni 20004 308 inlägg
#10

Nej, du skall alltså bara använda <layer>-elementet för att lägga eventen i, inte ge den ett nytt id. Däremot märkte jag att Netscape 6 fortfarande stödjer <layer>, så då får man solla bort det med en if-sats.

<div id="foo" style="position:absolute;top:50px;left:50px;" onMouseover="en_funktion();"><layer onMouseover="if(document.layers){ en_funktion(); }">
...innehåll...
</layer></div>

Tillägg;

Lagret som sådant är givetvis fortfarande det du definierar i <div>-elementet oavsett webbläsare. Skall du ex. flytta det är det fortfarande "foo" du refererar till i alla webbläsare. Det är bara det att eventet fångas upp i <layer> istället för <div> i Netscape 4.x

------------------
/ J

[Redigerat av Jojoxx den 05 okt 2001]

134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)