webForumDet fria alternativet
Logga in / Bli medlem

Fel med layer och NS

JavaScript

9 svar · 231 visningar · startad av Vide

Medlem sedan dec. 19998 577 inlägg
Frågan#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

Medlem 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.

Medlem 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;
}
}
Medlem 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

Medlem 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>

Medlem 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.. ;)

Medlem 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 :)

Medlem 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...

Medlem sedan dec. 19998 577 inlägg
#9

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

Medlem 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

384 ms totalt · 4 externa anrop · v20260731065814-full.14655e19
128 ms — deklarationer (db)
123 ms — hämta statistik (db)
130 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)