Avatar billede themepark Nybegynder
10. december 2003 - 01:52 Der er 29 kommentarer og
1 løsning

Hvorfor virker kun getElementById?

Jeg har følgende 2 linjer

document.getElementById("ÆFelt").style.left="100px"
document.ÆFelt.style.left="100px"

ÆFelt er et TEXTAREA.

Det jeg ikke forstår er hvorfor det kun er getElementById, der vil virke...det andet burde vel også virke, men ikke desto mindre gør det det ikke...jeg havde håbet nogle måske kunne kaste lidt lys over den sag for mig?
Avatar billede nikolajdu Nybegynder
10. december 2003 - 01:56 #1
generelt bør du ikke bruge æøå eller andre tegne i dine navne. prøv uden simpelthen...
Avatar billede themepark Nybegynder
10. december 2003 - 01:59 #2
Ja, se, den tanke havde jeg gjort mig inden jeg oprettede spørgsmålet, men selvom jeg ændrer det, virker den første stadigvæk ikke :(
Avatar billede nikolajdu Nybegynder
10. december 2003 - 02:05 #3
Jeg ser jeg faktisk selv tidligere har smidt et textarea ind i en <div> - Det er muligt jeg selv ikke kunne få det til at dutte...
Avatar billede nikolajdu Nybegynder
10. december 2003 - 02:08 #4
åhhh... prøv lige at sætte :

<textarea id="felt" style="position:absolute;left:0px;top:0px"></textarea>

Man skal nemlig lige sætte absolute på :))
Avatar billede nikolajdu Nybegynder
10. december 2003 - 02:17 #5
Næh det dutter sgu heller ikke...
Avatar billede pelkjaer Nybegynder
10. december 2003 - 11:52 #6
Prøv med name="felt" på textarea'et også
Avatar billede roenving Novice
11. december 2003 - 16:48 #7
Hvis du skal bruge den anden syntaks (IE only !-), skal du:

document.all.AEFelt.style.left="100px"

-- eller

AEFelt.style.left="100px"
Avatar billede themepark Nybegynder
12. december 2003 - 13:33 #8
roenving, hvorfor skal der et all på? Det står der da ikke noget om i min JavaScript bog, selvom den heller ikke beskæftiger sig med CSS...men det burde vel ikke have nogen betydning?
Avatar billede themepark Nybegynder
12. december 2003 - 13:34 #9
pelkjaer, jeg bruger altid NAME når jeg angiver et navn/id for et element...også selv til dem der ikke understøtter det *G* Så det startede jeg naturligvis med inden jeg stillede spørgsmålet ;)
Avatar billede roenving Novice
13. december 2003 - 03:48 #10
-- at adressere elementer direkte (via id) er en ting, som M$ indførte med Internet Explorer 4, men principielt er det en adressering via document.all, som man dog kan tillade sig at underforstå, at udelade ...

-- at adressere fra document direkte til et id har jeg godt nok ikke set brugt nogensinde ...

og i princippet burde adresseringen vel også hedde:

document.all["AEFelt"].style.left="100px";

-- men da javascript (og vel også Jscript) internt oversætter til den anden formulering, kan vi vel også ...

-- og må jeg så gentage nikolaj:

Brug aldrig, aldrig, aldrig æøå i html- eller javascript identifiers !-)

Valide tegn i begge er a-z, A-Z, _ og tal, hvis de ikke står først !o]
Avatar billede themepark Nybegynder
13. december 2003 - 15:43 #11
roenving, så kig i bogen JavaScript For Dummies (MIN bibel *G*), der kan du finde masse af eksempler, vil jeg mene...eller også har jeg bare misforstået en del i bogen.

Men dvs.

document.all["AEFelt"].style.left="100px";

ville være den helt korrekte måde at skrive det på?

Ville W3's HTML debugger eller hvad pokker det nu er den hedder, så melde fejl ved

document.all.AEFelt.style.left="100px";

og

AEFelt.style.left="100px";

?
Avatar billede roenving Novice
13. december 2003 - 16:06 #12
Nej, w3cs html-validator kigger ikke på javascript, så der vil du aldrig kunne få fejl ...

-- men brugere af andet end M$s produkter vil muligvis få fejl (og de fleste under alle omstændigheder !-), når man bruger document.all-konstruktionen ...

Muligvis vil brug af æøå kunne du på din egen maskine, og muligvis også på andre danske/europæiske brugeres, men du laver vel ikke en side, som kun skal ses af danskere med dansk som sprog på computeren ?-)

Selv vil jeg anbefale, at man bruger interCap-metoden til at lave identifiers, altså skriver, hvad variablen (identifieren) skal dække og så ændrer det til interCap: detteErEnInterCapVariabel, altså at mellemrum og bindestreger oversættes til et stort næste bogstav ...

-- så kan man udvide ved at sætte tal på, komplicerede variabler kan kobles sammen med underscore, som også kan bruges som start i helt specielle situationer, hvor man har brug for at understrege usædvanligheden !-)

-- og husk: _ikke_ tal som første tegn !o]
Avatar billede themepark Nybegynder
13. december 2003 - 16:09 #13
Rolig nu, roenving, jeg er altså ikke dum...jeg HAR fattet det med ÆØÅ ;)

Men nu forvirrer du mig dælme...hvis man skal have det til at fungere i både Netscape og IE, hvad er så den korrekte måde at skrive det på?

Og jo, jeg skal faktisk lave sådan en side ;)
Avatar billede roenving Novice
13. december 2003 - 16:21 #14
document.getElementById virker i IE5+, NS6+ og alle andre nyere browsere, document.all virker kun i IE4+ og i Opera ...

-- så hvis du vil have det til at virke uden problemer i alle almindelige browsere skal du:

if(document.getElementById){
  document.getElementById('dinVariabel').et-eller-andet
  ...
}else if(document.all){
  document.all['dinVariabel'].et-eller-andet
  ...
}
Avatar billede themepark Nybegynder
13. december 2003 - 16:24 #15
Okay...ja, det anede mig, at det skulle være getElementById.

Det lille script tjekker altså på sin vis automatisk, hvilken en der kan bruges...eller hvad?

Og kan document.getElementById ikke bruges i ældre browsere?
Avatar billede roenving Novice
13. december 2003 - 16:34 #16
Jeg tror det er i Opera 5, den kommer med og ellers er det som ovenfor angivet ...

-- Jeg kan ikke huske, vhordan NS4 håndterede det, men den er vel også tilstrækkeligt ude nu !-)

-- selv gør jeg kun getElementById, men der findes jo steder, hvor man har brug for at _meget_ sikker på, at de fleste kan se noget !o]
Avatar billede roenving Novice
13. december 2003 - 16:34 #17
... at være _meget_ ...
Avatar billede themepark Nybegynder
13. december 2003 - 16:36 #18
roenving, okay, fair nok...nu har jeg vist også fået alle de svar, jeg havde brug for ;) Smid lige et svar :)
Avatar billede roenving Novice
13. december 2003 - 16:38 #19
Velbekomme '-)
Avatar billede roenving Novice
13. december 2003 - 16:42 #20
-- og tak for points ;~}
Avatar billede nikolajdu Nybegynder
13. december 2003 - 20:42 #21
roenving - NS4 = document.layers["navn"]
Avatar billede nikolajdu Nybegynder
13. december 2003 - 20:43 #22
Nåja og det virker kun på name
Avatar billede roenving Novice
13. december 2003 - 20:44 #23
dvs.

if(document.getElementById){
  document.getElementById('dinVariabel').et-eller-andet
  ...
}else if(document.all){
  document.all['dinVariabel'].et-eller-andet
  ...
}else if(document.layers){
  document.layers['dinVariabel'].et-eller-andet
  //men i NS4 er der ikke et style-objekt, ligesom f.eks. visibility svarer 'show'
  ...
}
Avatar billede nikolajdu Nybegynder
13. december 2003 - 21:29 #24
Har altid brugt den her version :

<script language="javascript">   
ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false
ie5 =(document.getElementById)? true:false
ns6 = (document.getElementById && !document.all)?true:false;

function over(id){
var styleObj = (ns4)? document.layers[id] : (ie4)? document.all[id].style : document.getElementById(id).style;
styleObj.visibility = "visible";
}

som du rigtigt nok har gættet bruger layers ikke style.
Avatar billede roenving Novice
13. december 2003 - 21:34 #25
-- ville det i princippet ikke være rigtigere at vende den om ?-)

var styleObj = (ns6||ie5)? document.getElementById(id).style : (ie4)? document.all[id].style : document.layers[id];

-- og så var der ikke meget gætteværk der !-)
Avatar billede nikolajdu Nybegynder
13. december 2003 - 21:43 #26
Nej det ville det vel ikke - For jeg tjekker for document.layers eller document.all og hvis ikke... så document.getElementById

Koden er tussegammel, men idag kan man jo nøjes med :

ns4 = (document.layers)? true:false
ie4 = (document.all)? true:false

Og få noget der virker i de forskellige browsere - Dog differentieres der ikke her mellem hvilken browser af 5+ typen og det kan jo så give andre problemer.
Avatar billede roenving Novice
13. december 2003 - 21:45 #27
Grunden til at jeg ville vende den var, at de fleste browsere idag ville svare positivt på getElementById, så de ville blive fanget før man spurgte mere end een gang !-)
Avatar billede nikolajdu Nybegynder
13. december 2003 - 21:46 #28
Det er selvfølgelig rigtigt set :))
Avatar billede nikolajdu Nybegynder
13. december 2003 - 21:47 #29
HA! Du er fanget!!
Avatar billede roenving Novice
13. december 2003 - 21:48 #30
*lol*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester