Avatar billede erikjacobsen Ekspert
31. august 2006 - 13:20 Der er 35 kommentarer og
1 løsning

Hvornår bør/kan man bruge .setAttribute ?

Følgende virker fint:

    a=document.createElement("input");
    a.setAttribute("type","checkbox");

men anden linie kan også skrives som

    a.type="checkbox"

i hvert fald nogle steder. Det gælder også for andre attributter, fx size til et "text"-felt.

Men hvad er "rigtigst" at bruge, når man både skal tænke på lidt ældre browsere, og på fremtidige standarder?
Avatar billede mclemens Nybegynder
31. august 2006 - 13:44 #1
Tror at man bør bruge setAttribute idag ...
Man skal bruge setAttribute hvis man kører xhtml ...
Så fremtidige standarder peger i den retning :/

... jeg tror at alle nyere browsere understøtter det
( et lille link http://developer.mozilla.org/en/docs/DOM:element.getAttribute )
Avatar billede mclemens Nybegynder
31. august 2006 - 13:48 #2
Hmmm, lidt usikker selv ... tror at man bør bruge
setAttributeNS i xhtml så er lige med på en lytter her :)
Avatar billede olebole Juniormester
31. august 2006 - 13:51 #3
<ole>

- men IE kan tilgengæld ikke håndtere name-attributten  :o|
MS selv anbefaler derfor syntaksen (svejsebriller og nervemedicin kan anbefales):
    var newRadioButton = document.createElement("<INPUT TYPE='RADIO' NAME='RADIOTEST' VALUE='First Choice'>");
    http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/createelement.asp

a.type="checkbox" er 'den gamle' (JS)syntaks fra før W3C's standardiserede HTML-DOM, som introducerede set/getAttribute-metoderne. Under HTML er den gamle syntaks stadig lovlig, men da XHTML er et subset af XML, kan den ikke bruges (hvis der altså er tale om XHTML, der faktisk parses som sådan).
Her er man tvunget til at anvende XML-DOM, som også indeholder de to metoder set/getAttribute.

'style' er ikke at regne for en attribut - men et objekt på elementet. Derfor kan du ikke bruge set/getAttribute på den 'attribut'  :)

Heller ikke event-handlers kan manipuleres via de to metoder. Her burde man bruge metoden addEventListener - men den understøttes endnu ikke af IE, der kræver, man bruger attachEvent.

MS er igang med en total (og fra bunden) omskrivning af IE, hvorved den burde blive langt mere kompatibel med W#C's standarder .... så mangler vi blot FF's DOM-lag kommer på højde med dens forgængeres Netscape og Mozilla 1.5 i stedet for den katastrofe, vi belemres med idag  ;o)

/mvh
</bole>
Avatar billede mclemens Nybegynder
31. august 2006 - 13:57 #4
( link m.h.t. name problemet http://www.eksperten.dk/spm/726647#rid6385051 )
Avatar billede olebole Juniormester
31. august 2006 - 14:12 #5
mclemens >> Ja, en sådan funktion/metode er en udmærket ting - men man bør nu passe på med expando-properties på dokument-objektet. Læg den i stedet på window-objektet, hvilket performer bedre  ;o)
Avatar billede olebole Juniormester
31. august 2006 - 14:15 #6
Avatar billede olebole Juniormester
31. august 2006 - 14:16 #7
- og her tænker jeg naturligvis på afsnittet:
    "Don't Be Too Dynamic with Your Properties"
Avatar billede olebole Juniormester
31. august 2006 - 14:17 #8
- som også er et udmærket afsnit ... men det var nu dette afsnit, jeg mente:
    "Keep Your Expando Properties Off the Document"  ;D
Avatar billede erikjacobsen Ekspert
31. august 2006 - 14:17 #9
Rart at se du er i live, Ole.

Mht Xhtml så klapper vi lige muldyret her i det mørke Jylland, og holder os til HTML 4.01.

Ingen tvivl om at setAttribute(NS) er en del af eksisterende standard og kommende browsere. Hvad kan ikke bruge setAttribute i dag? Jeg regner ikke med at understøtte "generiskbrowser" version 4.x.

Og ja, Ole, jeg har hørt efter i timerne. style bruges som property ikke attribut, sådan vil det altid være.

onclick og name har jeg også brugt uden setAttribute, og det eneste positive er at det virker. Og det gør det vel også et stykke tid endnu.

En ny IE løser ingen problemer, men giver blot en ekstra browser.

Nej, tak, innerHTML og HTML-kode er bandlyst.
Avatar billede mclemens Nybegynder
31. august 2006 - 14:30 #10
( Takker for input og links Ole, kigger på dem iaften :o) )
Enig med det om at innerHTML og document.write() er bandlyst ...
(((innerHTML bruger jeg kun selv til quick test idag)))
Avatar billede erikjacobsen Ekspert
31. august 2006 - 14:37 #11
Jeg kan vist ikke smide et link til koden her, men Ole, hvis du har tid kan du tjene til en flaske F....... hvis du vil kigge et par siders JavaScript igennem og komme med indspark - send lige en mail til adressen i mit minisite, for tiden erikj567 hos hotmail punktum com. Men lad os "løse" problemet om setAttribute her, forstås.

Problemet er, at selv om det er afsindigt sjovt at lave dynamiske indtastningsformularer, og jeg endda får løn får det, så er det jo mig der hænger på det, når de kommer rendende om nogle år, og siger at det ikke længere virker.
Avatar billede erikjacobsen Ekspert
31. august 2006 - 15:25 #12
Og så skal det også virke i http://www.browzar.com/  ;)
Avatar billede mclemens Nybegynder
04. september 2006 - 08:53 #13
Avatar billede erikjacobsen Ekspert
04. september 2006 - 09:03 #14
Ja, en hel browser i 265 kByte er nok stadig en utopi. Men det er jo netop problemet med IE. Jeg havde fundet ud af at dynamiske checkboxe mister deres afkrydning, hvis man flytter dem rundt i DOM-træet, hvad jeg skal kunne, men det er et nemt hack: aflæs checked inden flytning, sæt den bagefter. Men dynamisk genererede radioknapper kan man slet ikke få markeret når man klikker i dem - ikke uden et hack med onclick (som jeg skal have til at virke i dag).

Kunden: "Og så skal den virke i IE". Konsulent: "Naturligvis. Vi skal lige gange prisen med 2".
Avatar billede mclemens Nybegynder
04. september 2006 - 09:44 #15
[ Kunden: ... med 2". ] ;D
Avatar billede olebole Juniormester
04. september 2006 - 10:28 #16
Erik >> I IE kan du først check'e en checkbox, når den er append'ed til et element i træet:

function bla() {
    var o = document.createElement("input");
    o.setAttribute("type", "checkbox");
    document.body.appendChild(o);
    o.setAttribute("checked", "checked");
}
Avatar billede erikjacobsen Ekspert
04. september 2006 - 11:29 #17
Det er en del af eventyret, Ole. Når jeg flytter rundt på den igen, skal det ske een gang til, udpluk:
    var c=a['chkbx'].checked;
    tbody1.insertBefore(row,row.previousSibling);
    a['chkbx'].checked=c;  // IE specifikt
Avatar billede olebole Juniormester
04. september 2006 - 12:33 #18
Hmmm ... ikke engang, når man i IE bruger ELEMENT.cloneNode(true) på en checked checkbox, overføres værdien af checked-attributten  :o(

Sådan er det åbenbart i IE ... til gengæld kan man ikke (som i FF) indsætte, hvad somhelst - hvor somhelst. Summen af elendigheder er vist konstant, når det gælder browsere  ;o)
Avatar billede erikjacobsen Ekspert
04. september 2006 - 13:30 #19
Det er bare rent til grin i IE. Når jeg så dynamisk har oprettet en række radioknapper, med samme navn, forskellig værdi, og får sat en prik med lidt hjælp fra en stump javascript, så fjerner IE ikke afkrydsningen i de andre radioknapper med samme navn. Det er der trods alt andre browsere der kan finde ud af.
Avatar billede erikjacobsen Ekspert
12. september 2006 - 15:08 #20
Og så skal vi snart have lukket den her. En sidste ting - en vurdering af forskelle i anvendelighed af følgende (hvad kan bruges i dag og i fremtiden?)

      sb3.options[0]=new Option("---vælg område---",-1);

og

      sb3.options[0]=document.createElement("option");
      sb3.options[0].value=-1;
      sb3.options[0].text="---vælg område---";
Avatar billede olebole Juniormester
12. september 2006 - 15:17 #21
Jeg er ikke sikker på, om 'new Option()' vil virke i fremtiden - men ellers skal det se sådan ud:

      sb3.options[0]=document.createElement("option");
      sb3.options[0].setAttribute("value", -1);
      sb3.options[0].appendChild( document.createTextNode("---vælg område---") );
Avatar billede olebole Juniormester
12. september 2006 - 15:19 #22
Ang. problemet med radios i IE, kunne det skyldes, du ikke får sat name-attributten (det kan IE nemlig ikke på input-elementer). Prøv evt. alert'e innerHTML'en af parentNode til elementet og se, om name-attributten er sat.
Avatar billede olebole Juniormester
12. september 2006 - 15:23 #23
Forudsat, du har foretaget et browsercheck (og variablen 'ie' afspejler resultatet dette):

if (ie) var tag = "<input type='checkbox' name='gnu'>";
else var tag = "input";

var inp = document.createElement(tag);
inp.setAttribute("type", "checkbox");
inp.setAttribute("name", "gnu");

ELEMENT.appendChild(inp);
Avatar billede olebole Juniormester
12. september 2006 - 15:25 #24
- det var det, jeg også schludrede om i (31/08-2006 13:51:56)  ;o)
Avatar billede erikjacobsen Ekspert
12. september 2006 - 15:41 #25
Men hvor langt tilbage vil 12/09-2006 15:17:11 virke?
Avatar billede olebole Juniormester
12. september 2006 - 15:57 #26
NS6.0 og IE5.0 vil jeg mene. Sidder ikke med dem i skødet, men det burde de understøtte  :)
Avatar billede erikjacobsen Ekspert
12. september 2006 - 18:29 #27
Godt nok. Hvis I begge smider et par svar, kommer der lidt bananer i turbanen.
Avatar billede mclemens Nybegynder
12. september 2006 - 18:48 #28
Nah, Ole kaster et svar - jeg skrev kun at jeg tror du skal bruge
setAttribute ... en kommentar fra en person der tror noget kan jeg ikke
selv bruge - det er bedre med en der ved det ligesom Ole ;)
Avatar billede mclemens Nybegynder
12. september 2006 - 18:54 #29
Den eneste ting der er træls er selvfølgelig at det kan være nødvendigt at bruge .value istedet for getAttribute("value") afhængig af ens system ... ((( hvis man f.eks. har behov for input validering via. FF som i - http://www.eksperten.dk/spm/731497#rid6423160 )))
Avatar billede mclemens Nybegynder
12. september 2006 - 19:02 #30
Ole, Tak for det document -> window m.h.t.
det name script (31/08-2006 13:57:08 og
31/08-2006 14:12:34) jeg har fået det rettet :)
Avatar billede erikjacobsen Ekspert
12. september 2006 - 19:21 #31
Det er så i orden, mclemens. Heldigvis skal denne del af systemet afvikles på færrest maskiner, af færrest mennesker, af færrest browsere. Så det er noteret at
  1) Det skal aftestes i relevante kombinationer af OS-er og browsere
  2) Det skal noteres, at det kræver en løbende vedligeholdelse. Øv osse.
Avatar billede erikjacobsen Ekspert
27. december 2006 - 10:59 #32
Smid lige et par svar, så jeg kan afgøre hvem der skal belønnes.
Avatar billede erikjacobsen Ekspert
17. marts 2007 - 22:02 #33
Ole og mcclemens altså ... der er mindst 30 kokosnødder til deling, hvis ellers I giver et lille bøvs...
Avatar billede olebole Juniormester
20. marts 2007 - 12:49 #34
- og faktisk har jeg 'forsket' lidt mere i sagen vedr. value-attributten ... og bl.a. dykket dybt i W3C's mailtråde  =)

Det viser sig, at der idag ikke findes en valid DOM-metode til at ekstrahere en dynamisk 'property' fra en node (som f.eks. value) ... og det er som sådan ikke en fejl.
Problemet er, at XHTML endnu ikke er færdig - men når vi overgår til XHTML2.0 og bl.a. XForms, vil det blive muligt at scripte validt mod XHTML-DOM'en. Indtil da må man skrive invalid XHTML - eller HTML4.01-Strict  ;o)
Avatar billede erikjacobsen Ekspert
03. april 2007 - 15:20 #35
Mcclemens må få lidt kokosnødder en anden gang.
Avatar billede olebole Juniormester
04. april 2007 - 13:35 #36
- og hvis han ønsker sig del i dem, opretter jeg gerne et spørgsmål  ;o)

Tak for nødder, Erik  =)
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