/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
ændre name til id
Fra : Ryan


Dato : 18-03-03 10:37

Hej.
Jeg bruger følgende funktion på min side:
function SwapImages(ImgName, ImgSrc) {document[ImgName].src =
eval(ImgSrc+".src");}
men den virker kun så længe jeg har en "name"-attribut på mine billeder.

Hvordan ændre jeg funktionen, så jeg kan bruge "id" istedet?

--
Ryan



 
 
Lasse Reichstein Nie~ (18-03-2003)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 18-03-03 10:53

"Ryan" <ryan@NOSPAM.dk> writes:

> Jeg bruger følgende funktion på min side:
> function SwapImages(ImgName, ImgSrc) {document[ImgName].src =
> eval(ImgSrc+".src");}
> men den virker kun så længe jeg har en "name"-attribut på mine billeder.
>
> Hvordan ændre jeg funktionen, så jeg kan bruge "id" istedet?

prøv:
function SwapImages(ImgName, ImgSrc) {
document.images[ImgName].src = document.images[ImgSrc].src;
}
Det burde virke.

Du har ikke brug for eval. Faktisk har du sandsynligvis aldrig brug
for eval, og det er en meget langsom og ressourcekrævende funktion at
bruge.

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
Art D'HTML: <URL:http://www.infimum.dk/HTML/randomArtSplit.html>
'Faith without judgement merely degrades the spirit divine.'

Ryan (18-03-2003)
Kommentar
Fra : Ryan


Dato : 18-03-03 17:35

> prøv:
> function SwapImages(ImgName, ImgSrc) {
> document.images[ImgName].src = document.images[ImgSrc].src;
> }
> Det burde virke.

Det ser ud til, at jeg ikke rigtigt kan få det til at virke alligevel -
"document.images[....] is null or not an object."

Til funktionen bruger jeg følgende:

dio1 = new Image(); dio1.src="./b_n01.jpg";
diol1 = new Image(); diol1.src="./b_n02.jpg";
dio2 = new Image(); dio2.src="./b_n01.jpg";
diol2 = new Image(); diol2.src="./b_n02.jpg";
dio3 = new Image(); dio3.src="./b_n01.jpg";
diol3 = new Image(); diol3.src="./b_n02.jpg";
osv. op til dio11

function MouseOver(ImgNr) {SwapImages("dio"+ImgNr,"diol"+ImgNr);}
function SwapImages(ImgName, ImgSrc) {document.images[ImgName].src =
document.images[ImgSrc].src;}

Og så kalder jeg det med onmouseover="MouseOver(1)" eller et andet tal alt
efter hvilket billede jeg vil skifte.

Det kan ses på: http://www.composmentis.dk/test.htm
--
Ryan



Lasse Reichstein Nie~ (18-03-2003)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 18-03-03 18:29

"Ryan" <ryan@NOSPAM.dk> writes:

> > prøv:
> > function SwapImages(ImgName, ImgSrc) {
> > document.images[ImgName].src = document.images[ImgSrc].src;
> > }
> > Det burde virke.
>
> Det ser ud til, at jeg ikke rigtigt kan få det til at virke alligevel -
> "document.images[....] is null or not an object."
>
> Til funktionen bruger jeg følgende:
>
> dio1 = new Image(); dio1.src="./b_n01.jpg";
> diol1 = new Image(); diol1.src="./b_n02.jpg";
> dio2 = new Image(); dio2.src="./b_n01.jpg";
> diol2 = new Image(); diol2.src="./b_n02.jpg";
> dio3 = new Image(); dio3.src="./b_n01.jpg";
> diol3 = new Image(); diol3.src="./b_n02.jpg";
> osv. op til dio11
>
> function MouseOver(ImgNr) {SwapImages("dio"+ImgNr,"diol"+ImgNr);}
> function SwapImages(ImgName, ImgSrc) {document.images[ImgName].src =
> document.images[ImgSrc].src;}

Aha, så ImgSrc er ikke navnet på et image element, men navnet på en
global javascript-variabel der indeholder et image-element.

Prøv så:
function SwapImages(ImgName, ImgSrc) {
document.images[ImgName].src = window[ImgSrc].src;
}

> Og så kalder jeg det med onmouseover="MouseOver(1)" eller et andet tal alt
> efter hvilket billede jeg vil skifte.

> Det kan ses på: http://www.composmentis.dk/test.htm

Jeg kan se at du bruger browseridentifikation baseret på eksistensen
af document.{layers,all,getElementById}. Det er en farlig ting at
gøre. For eksempel bliver Opera 7 genkendt som IE5, hvilket ikke er
helt rigtigt. Det ser ud til at virke alligevel, men er det mest held
eller forstand? :) Pas på med at lave browserdetection. Der bør være
en "case" der bliver brugt hvis man ikke genkender browseren, og man
skal passe på med at tro at kun IE har document.all og kun Mozilla har
getElementById og ikke document.all.

Der er også en lidt tvivlsomme konstruktion:
document.getElementById(['title' + titletohide]).style.visibility
(argumentet til getElementById skal være en streng, ikke et Array,
selvom arrayet nok heldigvis bliver lavet om til en streng der netop
matcher dets ene element).

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
Art D'HTML: <URL:http://www.infimum.dk/HTML/randomArtSplit.html>
'Faith without judgement merely degrades the spirit divine.'

Ryan (18-03-2003)
Kommentar
Fra : Ryan


Dato : 18-03-03 19:27

> Prøv så:
> function SwapImages(ImgName, ImgSrc) {
> document.images[ImgName].src = window[ImgSrc].src;
> }


- Tak dette virker.

> Jeg kan se at du bruger browseridentifikation baseret på eksistensen
> af document.{layers,all,getElementById}. Det er en farlig ting at
> gøre. For eksempel bliver Opera 7 genkendt som IE5, hvilket ikke er
> helt rigtigt. Det ser ud til at virke alligevel, men er det mest held
> eller forstand? :)

- Udelukkende held!
>Pas på med at lave browserdetection. Der bør være
> en "case" der bliver brugt hvis man ikke genkender browseren, og man
> skal passe på med at tro at kun IE har document.all og kun Mozilla har
> getElementById og ikke document.all.

Det jeg bruger browseridentifikationen til er:
if (ie4) {document.all['title21'].style.visibility = "hidden"; }
if (ns4) {document.layers['title21'].visibility = "hide"; }
if (ns6 || ie5) {document.getElementById(['title21']).style.visibility =
"hidden"; }
Jeg ved ikke om man kan sige at der er tale om en reel
browseridentifikation, da det jo mere bare er et spørgsmål om, at finde ud
af om jeg skal bruge document.all, layer eller getElementById. Her kan det
vel være ligemeget at Opera 7 bliver genkendt som IE5, da det jo så også
betyder, at Opera 7 forstår getElementById.
Eller?
Er der en bedre måde at ændre på, hvorvidt indholdet af en div skal være
hidden eller visible, som virker i de forskellige browsere?
document.div['title21'].style.visibility = hidden/visible virker ikke som om
det giver nogen effekt.

> Der er også en lidt tvivlsomme konstruktion:
> document.getElementById(['title' + titletohide]).style.visibility
> (argumentet til getElementById skal være en streng, ikke et Array,
> selvom arrayet nok heldigvis bliver lavet om til en streng der netop
> matcher dets ene element).

- Jeg er ikke helt sikker på, at jeg forstår dette (men jeg er sikker på at
jeg ikke forstår det). Skal jeg forsøge at ændre det? Og i så fald, hvordan
skal jeg så gribe det an?



--
Ryan



Lasse Reichstein Nie~ (18-03-2003)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 18-03-03 20:12

"Ryan" <ryan@NOSPAM.dk> writes:

> Det jeg bruger browseridentifikationen til er:
> if (ie4) {document.all['title21'].style.visibility = "hidden"; }
> if (ns4) {document.layers['title21'].visibility = "hide"; }
> if (ns6 || ie5) {document.getElementById(['title21']).style.visibility =
> "hidden"; }
> Jeg ved ikke om man kan sige at der er tale om en reel
> browseridentifikation, da det jo mere bare er et spørgsmål om, at finde ud
> af om jeg skal bruge document.all, layer eller getElementById. Her kan det
> vel være ligemeget at Opera 7 bliver genkendt som IE5, da det jo så også
> betyder, at Opera 7 forstår getElementById.
> Eller?

Rigtigt, i det her tilfælde, fordi den eneste anden egenskab du bruger
er ".style", som kun NS4 ikke forstår, og NS4 er relativt nem at
genkende). Der findes dog en anden browser der har document.layers og
som ikke er NS4 (OmniWeb tror jeg nok). Det vil måske virke alligevel
fordi den også har getElementById, og derfor tælles som både NS4 og NS6.

Som sagt, farligt.

> Er der en bedre måde at ændre på, hvorvidt indholdet af en div skal være
> hidden eller visible, som virker i de forskellige browsere?
> document.div['title21'].style.visibility = hidden/visible virker ikke som om
> det giver nogen effekt.

Nej, du skal have fat i elementet, og det jeg ville gøre er:
---
var elem;
if (document.getElementById) {elem = document.getElementById("idPåDiv");}
else if (document.all) {elem = document.all["idPåDiv"]; }
else if (document.layers) {elem = document.layers["idPåDiv"]; }
else { /* PANIK, rejs exception eller returner eller ... */ }

var elemStyle = elem.style || elem;

elemStyle.visibility = "visible";
---

Jeg tester ikke for hvilken browser det er, kun hvilke features den
har, så en helt ny browser vil stadig blive behandlet rigtigt (specielt
fordi standard-metoden er den der testes først, så Omniweb ikke løber
sur i document.layers, som findes men ikke virker).

> - Jeg er ikke helt sikker på, at jeg forstår dette (men jeg er sikker på at
> jeg ikke forstår det). Skal jeg forsøge at ændre det? Og i så fald, hvordan
> skal jeg så gribe det an?

document.getElementById(['title' + titletohide]).style.visibility
skal blot være
document.getElementById('title' + titletohide).style.visibility
Ingen firkantede parenteser nødvendigt. Det er lidt et tilfælde at det
virkede med dem ... det skyldes den måde arrays med et element bliver
lavet om til strenge. (Arrays kan skrives fx [2,3,4], du har et array
med et element hvor der burde være en streng)

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
Art D'HTML: <URL:http://www.infimum.dk/HTML/randomArtSplit.html>
'Faith without judgement merely degrades the spirit divine.'

Ryan (18-03-2003)
Kommentar
Fra : Ryan


Dato : 18-03-03 22:54

Tusind tak for hjælpen.
Det virker i al fald også på denne måde, så jeg går ud fra, at du har ret i,
at det er bedre på denne måde.

Mvh.
Ryan



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste