Autor Zpráva
Darker
Profil
Vytvořil jsem si funkci která umožňuje zešednutí nepoužívaných dhtml oken.
Každé okno má onmousedown="tafunkce(this.id)"
Funkce si na začátku ověří jestli okna.indexOf(newwindow)==-1 neboli jestli je okno už v poli oken na stránce.
Pokud ne přidá ho tam :
okna[pocetoken]=newwindow
pocetoken=pocetoken+1

(Dělal jsem to bez lenght ale mzslím že to nemá vliv.)
Někde tady IE hází chybu.
Celá funkce:
[i]okna=new Array();
pocetoken=0
aktualniokno='okno1'
tajnecisloI=0


function zesediveni(newwindow) {
aktualniokno=newwindow;
if(okna.indexOf(newwindow)==-1){
okna[pocetoken]=newwindow
pocetoken=pocetoken+1
}

tajnecisloI=0
while (tajnecisloI<=pocetoken-1) {
document.getElementById(okna[tajnecisloI]+'top').style.backgroundImage= "url('topblur.gif')"
document.getElementById(okna[tajnecisloI]+'top').style.color= "lightgrey"
document.getElementById(okna[tajnecisloI]).style.zIndex=2;

document.getElementById(aktualniokno+'top').style.backgroundImage= "url('top.bmp')"
document.getElementById(aktualniokno+'top').style.color= "white"
document.getElementById(aktualniokno).style.zIndex=8
tajnecisloI=tajnecisloI+1}
}
Chamurappi
Profil
Reaguji na darkera:
Někde tady IE hází chybu.
Kde a jakou? Místo tohoto úžasně výstižného popisu sis měl otevřít konzoli a přečíst si chybovou hlášku. Třeba by ses pak ani nemusel ptát.

Funkce si na začátku ověří jestli okna.indexOf(newwindow)==-1
Pokud sis k polím nedoskriptoval metodu indexOf, tak v tom je chyba.

Mimochodem:
1) Je docela dobrým zvykem dělat za příkazy středníky.
2) Také je dobrým zvykem používat var a nepoužívat globální proměnné tam, kde to není nezbytné.
3) Počet prvků v poli okna bys našel v okna.length, nepotřebuješ si je počítat vedle.
4) Změnit vzhled elementů by šlo pohodlněji změnou třídy (vlastnost className).
5) Na tvém místě bych si v poli okna neskladoval kousky ID, ale přímo elementy těch oken. Totéž u aktualniokno.
6) Je zbytečné zešedivovat všechna existující okna, když víš, které okno bylo minulé aktualniokno, ne?
Darker
Profil
Takže hláška zní :
Objekt tuto vlastnost nebo metodu nepodporuje.
A je v příkazu :
if(okna.indexOf(newwindow)==-1)


Chamurappi:
Pokud sis k polím nedoskriptoval metodu indexOf, tak v tom je chyba.
Nevím jak tohle myslíš, čímž se zvyšuje pravděpodobnost, že tam chyba opravdu je.

1)
Sředníky jsem dělal přibližně do té doby než jsem zjistil že na to nemají vliv, totéž platí o var.
Když píšu skript v řádku tak středníky samozřejmě dělám.

4)
ClassName jsem neznal skoušel jsem document.getElementById(okno+'top').class="neco"
Teď už se poučím.

3)
Length jsem nepoužil protože mi to vracelo undefined, až později jsem si všiml že to píšu špatně (lenght).

5) přímo elementy těch oken
No musím se přiznat, že ani tohle neznám.

6) Je zbytečné zešedivovat všechna existující okna, když víš, které okno bylo minulé aktualniokno, ne?
To mě nenapadlo.

PS: Jak to deláš aby ti kód nezalomil řádek? Skoušel jsem všechny možnosti [preNeco] co tu jsou a vždycky se to zalomilo.
Chamurappi
Profil
Reaguji na Darkera:
Nevím jak tohle myslíš
Metoda indexOf na poli neexistuje.

Sředníky jsem dělal přibližně do té doby než jsem zjistil že na to nemají vliv
Někdy vliv mají. Jestli nevíš, kdy vliv mají, užívej je vždy.

totéž platí o var
Někdy vliv má. Jestli nevíš, kdy vliv má, užívej ho vždy. Pamatuji si cca tři případy, kdy už zde někdo řešil nekompatibilitu prohlížečů vzniklou chybějícím varem, a blíže nespecfikovaný velký počet případů, kde bylo na vině užívání globálních proměnných.

„5) přímo elementy těch oken“
No musím se přiznat, že ani tohle neznám.
Princip spočívá v tom, že si nebudeš skladovat ID a pak podle těchto ID zase vyhledávat, ale že si uložíš rovnou ten objekt, který bys býval vyhledal pomocí document.getElementById. Nevím, jak vypadá zbytek tvého skriptu a jak rozsáhlé úpravy bys musel udělat, ale byl by to krok správným směrem. Ukládal by sis jen jeden element (asi <div>) zapouzdřující celé okno a při zešedivění bys měnil třídu jen jemu — na podkladě této třídy (a pevně daných tříd vnitřních elementů) by stylopis nabarvil šedě vše, co je třeba.

PS: Jak to deláš aby ti kód nezalomil řádek?
Jedu přes vývojovou verzi diskuse (sandbox), kde už máme chytřejší [pre]. Za pár týdnů či měsíců to půjde i v ostré verzi.
Darker
Profil
Chamurappi:
Metoda indexOf na poli neexistuje.
Aha, to žeší problém :D
Nenapadá tě jak jinak bych mohl ověřit jestli se nějaká hodnota nachází v poli? Bez cyklu for myslím.
Chamurappi
Profil
Reaguji na Darkera:
Bez cyklu to nepůjde. Metodu indexOf jde k polím doskriptovat, na MDC najdeš potřebný kód.

Vaše odpověď

Mohlo by se hodit

Nezapomeňte na odkaz na živou ukázku problému.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0